如何使Tkinter按钮命令生效
我有一个类里面有一个按钮,当我创建这个界面的时候,它会自动运行一个命令(我其实不想这样),然后之后按钮就不再工作了。我哪里做错了呢?一些内置的命令,比如endcommand,正常工作。
相关的代码片段(最开始的缩进问题可以忽略)
class GuiPart(object):
def __init__(self, master, queue, endCommand):
self.queue = queue
# Set up the GUI
#tkinter.Button(master, text='Done', command=endCommand).grid(row=6,column=6)
tkinter.Button(text='Update Variables', command=self.updateValues()).grid(row=3)
Lp_pacingState = tkinter.Label(text="p_pacingState")
Lp_pacingState.grid(row=1, column=3)
Tp_pacingState = tkinter.Label(bg="white", relief="ridge",justify="center",width=9)
Tp_pacingState.grid(row=1, column=4)
....
self.textBoxes = {"p_pacingState" : Tp_pacingState, "p_pacingMode" : Tp_pacingMode,
"p_hysteresis" : Tp_hysteresis, "p_hysteresisInterval" : Tp_hysteresisInterval,
"p_lowrateInterval" : Tp_lowrateInterval, "p_vPaceAmp" : Tp_vPaceAmp,
"p_vPaceWidth" : Tp_vPaceWidth, "p_VRP" : Tp_VRP}
#def updateValues(self,input):
def updateValues(self):
testInput = ["p_pacingState=3", "garbage=poop", "p_VRP=5"]
for updates in testInput:
print("zzzz")
var = updates.split("=")
try:
self.textBoxes[var[0]].config(text = var[1])
except:
pass
所以在创建界面的时候,我看到“zzzz”打印了3次(不过标签的文本没有更新),而且按钮之后也不再工作了。还有,如果有更好的方法来更新框里的内容,请告诉我。我从一个流中获取输入,顺序和相关性都不重要。
1 个回答
3
当你这样做的时候:
command=self.updateValues()
你实际上是在调用 self.updateValues
这个函数(因为有 ()
)。这个函数调用的结果被赋值给了命令属性,这并不是你想要的。你需要去掉 ()
,这样 command
属性就会得到这个方法的引用,而不是调用这个方法后的结果。