如何使Tkinter按钮命令生效

2 投票
1 回答
617 浏览
提问于 2025-04-16 06:15

我有一个类里面有一个按钮,当我创建这个界面的时候,它会自动运行一个命令(我其实不想这样),然后之后按钮就不再工作了。我哪里做错了呢?一些内置的命令,比如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 属性就会得到这个方法的引用,而不是调用这个方法后的结果。

撰写回答