在tkinter中销毁方法

时间:2015-12-08 15:52:01

标签: python tkinter destroy

class Clicked(): 
    dogame=True

    def __init__(self):
        None


    def change(self): 
       self.dogame=False

currentgame=Clicked()
root = Tk()

def quitt(): 
    root.destroy()
    currentgame.change()

qbutton = Button(base, text = "Quit", command = quitt(), foreground = "Red", **kwargs)
qbutton.pack(side = BOTTOM)

这是我正在尝试编写的游戏代码的一部分。我想知道为什么当我点击qbutton时它不会破坏窗口。我需要它,以便当我按下按钮时我也改变了dogame的值,所以我不能简单地设置command = root.destroy

2 个答案:

答案 0 :(得分:1)

命令需要一个功能。您已提供函数的返回值

你的意思是

qbutton = Button(base, text = "Quit", command = quitt, foreground = "Red", **kwargs)

通过从quitt删除括号,我们不再对其进行评估。由于函数是python中的第一类对象,我们可以像其他任何东西一样传递它们。一旦你调用了这个函数,你就会传递它返回的内容。在这种情况下,它隐含地返回None的事实掩盖了错误

请注意,您考虑过使用root.destroy;这与使用root.destroy()和调用语法

的显着不同

答案 1 :(得分:0)

当您指定command = quitt()时,您在构建按钮时调用该函数,然后将该函数返回的内容(None)添加到命令调用中。

相反,将callable添加到命令:

qbutton = Button(base, text = "Quit", command = quitt, foreground = "Red", **kwargs)