tkinter unbind 似乎没有解除绑定
tkinker unbind doesn't seem to unbind
我有这个代码:
def on_click(event=None):
c.unbind('<Button-1>')
c.config(background="red")
print ("You clicked the square")
time.sleep(delay)
c.config(background="green")
c.bind('<Button-1>', on_click)
root.update()
root = tk.Tk()
c = tk.Canvas(root, width=200, height=200, background="green")
c.pack()
c.bind('<Button-1>', on_click)
root.mainloop()
当我点击 canvas 时它是红色的(未绑定),它会在睡眠完成时打印 "You clicked the square"。
我已经尝试过这里的方法:Deleting and changing a tkinter event binding
但没有结果,因为我仍然可以单击正方形并在它为红色时从中获取打印件
您正在调用 unbind
,然后冻结应用程序。当它被冻结时,事件继续被添加到队列中而不被处理。睡眠结束后,您会在队列有机会处理事件之前立即重新建立绑定。在处理事件时,绑定已经重新建立。
根据一般经验,您永远不应在 GUI 程序中调用 sleep
,这是一个很好的例证。
如果您想短时间取消绑定然后重新设置,取消绑定然后在给定的时间段后使用after
重新设置。
def on_click(event=None):
c.unbind('<Button-1>')
c.config(background="red")
c.after(delay, enable_binding)
def enable_binding():
c.config(background="green")
c.bind('<Button-1>', on_click)
当你点击时,你的函数被调用,你改变颜色并取消绑定事件。 然后,事件循环有机会处理颜色变化并处理其他事件。一旦时间结束,您的功能将被调用,事件将被重新绑定。
我有这个代码:
def on_click(event=None):
c.unbind('<Button-1>')
c.config(background="red")
print ("You clicked the square")
time.sleep(delay)
c.config(background="green")
c.bind('<Button-1>', on_click)
root.update()
root = tk.Tk()
c = tk.Canvas(root, width=200, height=200, background="green")
c.pack()
c.bind('<Button-1>', on_click)
root.mainloop()
当我点击 canvas 时它是红色的(未绑定),它会在睡眠完成时打印 "You clicked the square"。
我已经尝试过这里的方法:Deleting and changing a tkinter event binding 但没有结果,因为我仍然可以单击正方形并在它为红色时从中获取打印件
您正在调用 unbind
,然后冻结应用程序。当它被冻结时,事件继续被添加到队列中而不被处理。睡眠结束后,您会在队列有机会处理事件之前立即重新建立绑定。在处理事件时,绑定已经重新建立。
根据一般经验,您永远不应在 GUI 程序中调用 sleep
,这是一个很好的例证。
如果您想短时间取消绑定然后重新设置,取消绑定然后在给定的时间段后使用after
重新设置。
def on_click(event=None):
c.unbind('<Button-1>')
c.config(background="red")
c.after(delay, enable_binding)
def enable_binding():
c.config(background="green")
c.bind('<Button-1>', on_click)
当你点击时,你的函数被调用,你改变颜色并取消绑定事件。 然后,事件循环有机会处理颜色变化并处理其他事件。一旦时间结束,您的功能将被调用,事件将被重新绑定。