gpt4 book ai didi

python - tkinter unbind 似乎没有取消绑定(bind)

转载 作者:行者123 更新时间:2023-12-01 01:38:05 30 4
gpt4 key购买 nike

我有这个代码:

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 为红色(未绑定(bind))时单击 Canvas 时,它会在 sleep 完成时打印“您单击了方 block ”。

我已经尝试过这里的方法:Deleting and changing a tkinter event binding但没有得到任何结果,因为我仍然可以单击该方 block 并在其为红色时从中获取打印

最佳答案

您正在调用unbind,然后卡住应用程序。当它被卡住时,事件会继续添加到队列中而不被处理。 sleep 完成后,您将在队列有机会处理事件之前立即重新建立绑定(bind)。当事件被处理时,绑定(bind)已经被重新建立。

作为一般经验法则,您永远不应该在 GUI 程序中调用 sleep,这就是一个很好的说明。

如果您想短时间取消绑定(bind)然后重置,请先取消绑定(bind),然后在指定时间段后使用 after 重置绑定(bind)。

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)

当您单击时,您的函数将被调用,您可以更改颜色并取消绑定(bind)事件。 然后,事件循环有机会处理颜色变化并处理其他事件。一旦时间过去,您的函数将被调用,事件将被重新绑定(bind)。

关于python - tkinter unbind 似乎没有取消绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52192244/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com