删除和更改tkinter事件绑定

发布于 2021-01-29 18:09:15

如何停止事件的处理或切换事件的功能?

修改后的代码:

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()
关注者
0
被浏览
53
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您只需bind()使用事件的新功能再次调用即可。既然你没有利用第三个参数,addbind()此只是简单地覆盖任何已经存在。默认情况下,此参数为,''但它也接受"+",它将在该事件已触发的回调中添加回调。

    但是,如果您开始使用该可选参数,则需要使用该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>")
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看