【问题标题】:How to stop callback when one evend binds another?当一个事件绑定另一个事件时如何停止回调?
【发布时间】:2020-02-17 11:07:15
【问题描述】:

我的 tkinter 画布框架在 wchich 鼠标左键绑定到某个动作

canvas_frame = tk.Canvas(self)  # Master is tk.Frame

self.canvas_frame.tag_bind('some_tag', '<ButtonPress-1>', self.some_action)

def some_action(self):
    #do something
    self.canvas_frame.bind('<ButtonPress-1>', self.another_action)

每当我左键单击some_taganother action 就会被执行。即使在最初绑定 another_action 时第一次单击。

有没有办法阻止another_action被执行?

【问题讨论】:

  • 使用:self.canvas_frame.after(0, self.canvas_frame.bind, '&lt;ButtonPress-1&gt;', self.another_action) 允许当前事件结束。

标签: python python-3.x events tkinter tkinter-canvas


【解决方案1】:

有多种方法可以做到这一点,哪种最合适取决于您的用例。

  1. 与其在buttonPress-1中绑定self.another_action,不如在buttonRelease-1中绑定。

  2. 按您的方式绑定它,但在 self.another_action 中有一个局部变量,用于跟踪第一次调用,并且在第一次调用时不执行任何操作(返回)。

  3. 与其在 buttonPress-1 中设置绑定,不如设置一个变量来指示应该进行额外的绑定。然后在别处进行绑定,例如在 Tk.after() 的下一次调用中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多