Привязать виджет из класса - PullRequest
0 голосов
/ 05 февраля 2011

Каждый пример, который я видел по этой теме, показывает, что Button привязан к команде, за исключением того, что виджет Button был создан вне класса:

например:.

from Tkinter import *

root = Tk()

def callback(event):
    print "clicked at", event.x, event.y 

frame = Frame(root, width=100, height=100) 
frame.bind("<Button-1>", callback) 
frame.pack()

root.mainloop()

Теперь все в порядке, за исключением того, что я получаю ошибки при попытке сделать следующее:

from Tkinter import *
class App():
    def __init__(self,parent):
        o = Button(root, text = 'Open', command = openFile)
        o.pack()
    def openFile(self):
        print 'foo'


root = Tk()
app = App(root)
root.mainloop()

Замена "command = openFile" на "command = self.openFile ()" или "command = openFile ()" также не работает.

Как связать функцию с кнопкой в ​​моем классе?

1 Ответ

5 голосов
/ 05 февраля 2011

command = self.openFile

Если вы наберете command = self.openFile(), вы фактически вызовете метод и установите возвращаемое значение в качестве команды. Доступ к нему без скобок (как в неклассной версии) дает вам фактический объект метода. Вам нужно self. впереди, потому что в противном случае Python попытается найти openFile из глобального пространства имен.

Разница между App.openFile и self.openFile заключается в том, что последний связан с конкретным экземпляром, тогда как первому необходимо предоставить экземпляр App при последующем вызове. Документ Модель данных Python содержит больше информации о связанных и несвязанных методах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...