删除和更改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()
使用事件的新功能再次调用即可。既然你没有利用第三个参数,add
在bind()
此只是简单地覆盖任何已经存在。默认情况下,此参数为,''
但它也接受"+"
,它将在该事件已触发的回调中添加回调。但是,如果您开始使用该可选参数,则需要使用该
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>")