我已经定义了一个继承自Tkinter小部件的类 现在,我想将一个实际上是自定义对象方法的回调绑定到其父窗口小部件。我怎么能这样做?
目前,我有这样的事情:
from tkinter import *
from tkinter import ttk
class MyLabel(ttk.Label):
def __init__(self, *args, **kwargs):
ttk.Label.__init__(self, *args, **kwargs)
self.ntimes = 0
def test(self):
self.ntimes += 1
self.configure(
text='Now the label has changed {} times'.format(self.ntimes)
)
if __name__ == '__main__':
root = Tk()
f = ttk.Frame(root)
f.grid()
l = MyLabel(f, text='A label')
l.grid()
root.bind('<Left>', l.test)
root.mainloop()
但是我收到了错误:
TypeError: test() takes 1 positional argument but 2 were given
注意:这只是一个简化的例子;我可以使用textvariable
对象的ttk.Label
选项来动态更新文本,但我想专注于我遇到的一般问题。
答案 0 :(得分:2)
您需要定义test
才能将event
作为参数:
def test(self, event):
...
如果您不想这样做,可以将lambda
函数绑定到回调:
root.bind('<Left>', lambda e: l.test())