将事件附加到self(canvas)tkinter

时间:2016-07-27 17:16:16

标签: python canvas tkinter tk

我在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()

仅当我将事件附加到类之外时才正确绑定事件函数。任何帮助找到将事件附加到扩展画布的方法都将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题出在这一行:

self.bind("<Button-1>", self.callback())

您需要将可调用的内容(换句话说,函数)连接到事件。该函数引用为self.callback。如果您调用该函数(self.callback()),那么您将self.callback()返回值连接到click事件而不是函数本身。