将事件附加到自身 (canvas) tkinter
Attaching event to self (canvas) tkinter
我在 python 中创建了一个 class 来扩展 tkinter canvas。我正在尝试将事件附加到此 canvas 以处理 class 内的点击。如果我将事件附加到 class 本身之外,但在 class 内绑定时,它会起作用,点击事件只发生一次,然后继续不做任何事情,只执行第一次点击:
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()
仅当我将事件附加到 class 之外时,才能正确绑定事件。任何帮助找到将事件附加到扩展 canvas 的方法都将不胜感激。
问题出在这一行:
self.bind("<Button-1>", self.callback())
您需要将可调用的东西(换句话说,函数)连接到事件。该函数被引用为 self.callback
。如果您调用函数 (self.callback()
),则您将 self.callback()
的 return 值 连接到点击事件而不是函数本身。
我在 python 中创建了一个 class 来扩展 tkinter canvas。我正在尝试将事件附加到此 canvas 以处理 class 内的点击。如果我将事件附加到 class 本身之外,但在 class 内绑定时,它会起作用,点击事件只发生一次,然后继续不做任何事情,只执行第一次点击:
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()
仅当我将事件附加到 class 之外时,才能正确绑定事件。任何帮助找到将事件附加到扩展 canvas 的方法都将不胜感激。
问题出在这一行:
self.bind("<Button-1>", self.callback())
您需要将可调用的东西(换句话说,函数)连接到事件。该函数被引用为 self.callback
。如果您调用函数 (self.callback()
),则您将 self.callback()
的 return 值 连接到点击事件而不是函数本身。