【问题标题】:Attaching event to self (canvas) tkinter将事件附加到自我(画布)tkinter
【发布时间】:2016-12-01 20:15:12
【问题描述】:

我在 python 中创建了一个扩展 tkinter 画布的类。我正在尝试将一个事件附加到此画布以处理类中的点击。如果我将事件附加到类本身之外,它会起作用,但是当在类中绑定时,单击事件只发生一次,然后根本不做任何事情,只执行第一次单击:

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

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

【问题讨论】:

  • 无法复制,工作正常。 (“完全没问题”的意思是每次我点击它都会显示一个错误,因为它缺少self 参数。)不确定它是否重要,但你使用的是什么 python 版本?
  • 真的吗?我正在使用 python 3.5 和 Pycharm,它为我运行,但我只是没有按预期工作
  • 你的意思是类头class mycanvas()缺少self参数吗?
  • 不,回调需要self
  • 不要在连接时调用回调。那应该是self.bind("&lt;Button-1&gt;", self.callback)callback 之后没有括号。

标签: python canvas tkinter tk


【解决方案1】:

问题出在这一行:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    相关资源
    最近更新 更多