python - 删除和更改 tkinter 事件绑定(bind)

标签 python events tkinter

我如何停止处理事件或切换为它调用的函数?

修改后的代码:

from Tkinter import *

class GUI:
    def __init__(self,root):
        Window = Frame(root)
        self.DrawArea = Canvas(Window)
        self.DrawArea.pack()
        Window.pack()

        self.DrawArea.bind("<Button 1>",self.starttracking)

    def updatetracking(self,event):
        print event.x,event.y

    def finishtracking(self,event):
        self.DrawArea.bind("<Button 1>",self.starttracking)
        self.DrawArea.unbind("<Motion>")

    def starttracking(self,event):
        print event.x,event.y
        self.DrawArea.bind("<Motion>",self.updatetracking)
        self.DrawArea.bind("<Button 1>",self.finishtracking)



if __name__ == '__main__':
    root = Tk()
    App = GUI(root)
    root.mainloop()

最佳答案

您可以简单地使用事件的新函数再次调用 bind()。由于您没有使用 bind() 中的第三个参数 add,这只会覆盖已经存在的任何内容。默认情况下,此参数为 '',但它也接受 "+",这将为该事件已触发的回调添加一个回调。

如果您开始使用该可选参数,那么您将需要使用 unbind() 函数来删除单个回调。当您调用 bind() 时,会返回一个 funcid。您可以将此 funcid 作为第二个参数传递给 unbind()

例子:

self.btn_funcid = self.DrawArea.bind("<Button 1>", self.my_button_callback, "+")

# Then some time later, to remove just the 'my_button_callback':
self.DrawArea.unbind("<Button 1>", self.btn_funcid)

# But if you want to remove all of the callbacks for the event:
self.DrawArea.unbind("<Button 1>")

关于python - 删除和更改 tkinter 事件绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6433369/

相关文章:

Python 日志记录 : disable stack trace

Python:将 Json 解包到数据框中

c# - 为 Web 浏览器控件的 OnScroll 创建事件处理程序

python - 如何使用 tkinter 使用 lambda 创建 0-9 数字按钮?

python - 关闭并打开另一个窗口

python - 使用 TKInter 下拉菜单中的选项分配变量 - Python 2.7

python - 在 Python Scraper 中从单个 URL 更改为 Excel 列表

python - pipelinev 无法使用 pyenv python 3.8.0 创建虚拟环境

C++ 事件处理

javascript - 清除排队事件的 BehaviorSubject,因为每个事件都在 Angular2 中用 Observables 解决