我在python中创建了一个扩展tkinter画布的类。我正在尝试将一个事件附加到此画布以处理该类中的单击。如果我将事件附加在类本身之外,但是当在类中绑定时,click事件只发生一次,然后继续不执行任何操作,只执行第一次单击时,它起作用:
class myCanvas(Canvas):
def callback(event):
print('clicked at', event.x, event.y)
def __init__(self, parent, **kwargs):
Canvas.__init__(self, parent, **kwargs)
self.bind("<Button-1>", self.callback())
self.height = self.winfo_reqheight()
self.width = self.winfo_reqwidth()
仅当我将事件附加到类之外时才正确绑定事件函数。任何帮助找到将事件附加到扩展画布的方法都将不胜感激。
答案 0 :(得分:1)
问题出在这一行:
self.bind("<Button-1>", self.callback())
您需要将可调用的内容(换句话说,函数)连接到事件。该函数引用为self.callback
。如果您调用该函数(self.callback()
),那么您将self.callback()
的返回值连接到click事件而不是函数本身。