2017-01-11 8 views
-1

現在、特定の変数を含むウィンドウが3つあります。そして私の目標は、thosseエントリ内に何かを入力し、ボタンを押してそれらをすべて更新してコマンドを実行できるようにすることです。しかし、何らかの理由で私のボタンを実行するように設定したコマンドは、プログラムを起動するとすぐに自動的に実行され、使用できなくなります。ここで私のコードの一部は、現在の問題を示していますbuttonAは、コマンドを持つものです。Tkinterボタンウィジェットは、コマンドを自動的に実行してから動作を停止します。

#Entries 
entryA = Entry(Window,text="Angle",bg=bgB,fg=fgB,bd=0) 
entryA.grid(row=1,column=2) 
entryA.insert(0,info['a']) 
entryB = Entry(Window,text="Velocity",bg=bgB,fg=fgB,bd=0) 
entryB.grid(row=2,column=2) 
entryB.insert(0,info['v']) 
entryC = Entry(Window,text="Initial Height",bg=bgB,fg=fgB,bd=0) 
entryC.grid(row=3,column=2) 
entryC.insert(0,info['iH']) 
entryD = Entry(Window,text="Rotate",bg=bgB,fg=fgB,bd=0) 
entryD.grid(row=5,column=7) 
entryE = Entry(Window,text="Amount",bg=bgB,fg=fgB,bd=0) 
entryE.grid(row=6,column=7) 
entryF = Entry(Window,text="Password",bg=bgB,fg=fgB,bd=0,show='*') 
entryF.grid(row=13,column=6) 
#CheckBoxes 
var=None 
checkA = Checkbutton(Window,bg=bgB,fg=fgB,bd=0,activebackground=ActiveC,activeforeground=fgB,variable=var).grid(row=1,column=7,sticky='w') 
checkB = Checkbutton(Window,bg=bgB,fg=fgB,bd=0,activebackground=ActiveC,activeforeground=fgB,variable=var).grid(row=2,column=7,sticky='w') 
checkC = Checkbutton(Window,bg=bgB,fg=fgB,bd=0,activebackground=ActiveC,activeforeground=fgB,variable=var).grid(row=3,column=7,sticky='w') 
checkD = Checkbutton(Window, text="",bg=bgB,fg=fgB,bd=0,activebackground=ActiveC,activeforeground=fgB,Avariable=var).grid(row=4,column=7,sticky='w') 
#Buttons 
buttonA = Button(Window,text="Confirm",bg=bgB,fg=fgB,activebackground=ActiveC,activeforeground=fgB,bd=0,command=updateButton('A')).grid(row=1,column=4) 
buttonB = Button(Window,text="Confirm",bg=bgB,fg=fgB,activebackground=ActiveC,activeforeground=fgB,bd=0).grid(row=2,column=4) 
buttonC = Button(Window,text="Confirm",bg=bgB,fg=fgB,activebackground=ActiveC,activeforeground=fgB,bd=0).grid(row=3,column=4) 
buttonD = Button(Window,text="ACTIVATE",bg=bgB,fg=fgB,activebackground=ActiveC,activeforeground=fgB,bd=0).grid(row=5,column=9) 
buttonE = Button(Window,text="ACTIVATE",bg=bgB,fg=fgB,activebackground=ActiveC,activeforeground=fgB,bd=0).grid(row=6,column=9) 
buttonFIRE = Button(Window,text="Fire",bg=bgB,fg=fgB,activebackground=ActiveC,activeforeground=fgB,bd=0).grid(row=14,column=6,sticky='w') 

答えて

0

command=(およびbind())は、関数名(コールバック)を必要とする - それはあなたが引数を持つ関数を使用する必要がある場合

command=updateButton 

その後、使用()ないことを意味すると引数lambda

command=lambda:updateButton('A') 

ところで:あなたの関数はsタルトとその結果はに割り当てられます - ボタンに割り当てられた機能を生成することが有用なことがあります。


ところで:var = Widget(...).grid(...)grid()/pack()/place()リターンNoneので、変数にNoneを割り当てます。我々はlower_caseを使用し、コードをより読みやすくするためにPEP 8 -- Style Guide for Python Code

を参照してください。あなたはそれが

Widget(...).grid(...) 
ところで

必要がない場合は2つの段階

var = Widget(...) 
var.grid(...) 

で行うか、変数を削除する必要があります変数と関数/メソッドの名前 - つまり。 window,button_a,entry_a等、CamelCaseのクラス名が挙げられる。

すべてのカンマの後にスペースを使用します。

+0

ブラボーは非常によく説明されています。私はフォーマットエラーを私の注意を引くことができてうれしいです。非常に良い答え私はこれに感謝してどれくらい表現することができないので、良い一日を。 – Apocolyptic

関連する問題