Tkinter按钮小部件自动运行命令,然后停止工作

时间:2017-01-11 21:48:40

标签: python button tkinter

我目前在窗口上有3个包含特定变量的条目。我的目标是能够在thosse条目中键入内容,然后按一个按钮更新它们并运行命令。但是,由于某种原因我将按钮设置为运行的命令会在您启动程序后立即自动运行,然后变得无法使用。这是我的代码中显示问题的部分,当前buttonA是带命令的那个。

#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')

1 个答案:

答案 0 :(得分:0)

command=(和bind())需要函数名称(回调) - 它表示没有()和参数

command=updateButton

如果必须使用带参数的函数,请使用lambda

command=lambda:updateButton('A')

BTW:现在你的函数在开始时执行,结果被分配给command= - 生成分配给按钮的函数有时很有用。

BTW:var = Widget(...).grid(...)会将None分配给变量,因为grid()/pack()/place()会返回None。你必须分两步完成

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

如果您不需要,请删除变量

Widget(...).grid(...)

BTW:见PEP 8 -- Style Guide for Python Code

为了使代码更具可读性,我们对变量和函数/方法使用lower_case名称 - 即。 windowbutton_aentry_a等,以及类的CamelCase名称。

我们在每个逗号后使用空格。