2015-02-27 10 views
2

В маленьком графическом приложении ниже. Когда я использую параметр команды кнопки для вызова функции. Он не работает следующим образом: self.update() скорее он работает следующим образом: self.update. Почему так? Есть ли какой-то особый способ, которым управляет опция команды? Я думаю, что метод или функция должна быть вызвана с этими скобками (), если это не свойство:кнопка command option in tkinter

т.е.

 @name.setter: 
    def setter(self, name): 
      self.name = name 

    #main 
    object.name = "New_obj" 

Примечание: выше только шаблон, так что вы можете получить мою точку зрения. Я не написал полный действительный код. Включая класс и все остальное.

from tkinter import * 

class MuchMore(Frame): 
    def __init__(self, master): 
     super(MuchMore,self).__init__(master) 
     self.count =0 
     self.grid() 
     self.widgets() 

    def widgets(self): 
     self.bttn1 = Button(self, text = "OK") 
     self.bttn1.configure(text = "Total clicks: 0") 
     self.bttn1["command"] = self.update # This is what I am taking about 
     self.bttn1.grid() 

    def update(self): 
     self.count += 1 
     self.bttn1["text"] = "Total clicks" + str(self.count) 


#main 

root = Tk() 
root.title("Much More") 
root.geometry("324x454") 
app = MuchMore(root) 
+1

Это потому, что вы передаете функцию как аргумент, который нужно распаковать и вызвать. Помните, что функции - это объекты! –

ответ

1

Это функция высокого порядка, то есть вы ссылаетесь на функцию как объект. Вы используете , а не, вызывая функцию и присваивая команду возвращаемому значению функции. См. here для получения дополнительной информации.

1

Параметр command принимает ссылку на функцию - то есть: имя функции. Если вы добавите скобки, вы попросите python выполнить функцию и дать результат функции параметру command.