将事件附加到自身 (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 值 连接到点击事件而不是函数本身。