2015-12-08 4 views
0
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, поэтому я не могу просто установить команду = root.destroyметод уничтожения в tkinter

ответ

1

Команде требуется функция. Вы предоставили возвращаемое значение функции.

Вы имели в виду

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

Удаляя скобки из quitt, мы больше не оценивая его. Поскольку функции являются первоклассными объектами в python, мы можем передавать их, как и все остальное. Когда вы вызываете функцию, вы передаете все, что она возвращает. В этом случае тот факт, что он возвращает None, неявно замаскировал ошибку

Обратите внимание, что вы считали, что используете root.destroy; это отличается отличается от использования root.destroy() с вызывным-синтаксисом

0

При назначении command = quitt() вы вызываете эту функцию в то время, когда кнопка строятся, а затем добавить, что эта функция возвращает (None) команду вызова.

Вместо этого добавьте отозваны в команду:

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

Я думаю, что я бил тебя по 5 миллисекунд :) –

Смежные вопросы