【问题标题】:Why is my Tk button being pressed automatically?为什么我的 Tk 按钮会被自动按下?
【发布时间】:2014-11-19 03:16:23
【问题描述】:

在下面的代码中,单击按钮应将黑色文本从 Hello 更改为 Goodbye。但是当我运行程序时,它会立即说再见。

from Tkinter import *
from tkMessageBox import *
print "this is a test"


class Demo(Frame):
    def __init__(self):
        self.createGUI()
        print "init"
        #self.__mainWindow = Tk()
    def destroy(self):
        print "destroy"
    def createGUI(self):
        Frame.__init__(self)
        self.pack(expand = YES, fill = BOTH)
        self.master.title("Demo")
        self.trackLabel = StringVar()
        self.trackLabel.set("Hello")
        self.trackDisplay = Label(self, font = "Courier 14", textvariable = self.trackLabel, bg = "black", fg = "green")
        self.trackDisplay.grid(sticky = W+E+N+S)
        self.button1 = Button(self, text = "Click Me", width = 10, command = self.bpress())
        self.button1.grid(row = 2, column = 0, sticky = W+E+N+S)

    def bpress(self):
        self.trackLabel.set("Goodbye")
# run the program
def main():
    tts = Demo()
    tts.mainloop()

if __name__ == "__main__":
    main()

【问题讨论】:

    标签: python user-interface tkinter tk


    【解决方案1】:

    因为您在创建self.button1 按钮时调用了self.bpress

    self.button1 = Button(self, text = "Click Me", width = 10, command = self.bpress())
    #                                                                               ^^
    

    只需删除括号并将command 分配给self.bpress 函数对象本身:

    self.button1 = Button(self, text = "Click Me", width = 10, command = self.bpress)
    

    【讨论】:

    • 谢谢!当网站允许时,我会接受你的回答!
    【解决方案2】:

    供将来参考:

    如果要向函数发送参数,只需添加lambda:

    带有命令callback()的按钮示例:

    yourButton = Tkinter.Button(root, text="Go!", command= lambda: callback(variableOne, variableTwo, variableThree)).pack()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 2021-12-18
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      相关资源
      最近更新 更多