Python tkinker解绑不';我似乎没有解开束缚

Python tkinker解绑不';我似乎没有解开束缚,python,tkinter,tkinter-canvas,Python,Tkinter,Tkinter Canvas,我有以下代码: 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() r

我有以下代码:

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()
单击时定义(事件=无): c、 解除绑定(“”) c、 配置(背景=“红色”) 打印(“您单击了正方形”) 时间。睡眠(延迟) c、 配置(背景=“绿色”) c、 绑定(“”,单击时) root.update() root=tk.tk() c=tk.Canvas(根,宽度=200,高度=200,背景=“绿色”) c、 包() c、 绑定(“”,单击时) root.mainloop() 当我点击画布时,它是红色的(未绑定),当睡眠完成时,它会打印“你点击了正方形”

我已经在这里尝试过这种方法:
但是没有结果,因为我仍然可以单击正方形,当它是红色时从中获取打印,然后冻结应用程序。冻结时,事件会继续添加到队列中,而不进行处理。睡眠完成后,您立即在队列有机会处理事件之前重新建立绑定。在处理事件时,绑定将已经重新建立

一般来说,在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)
单击时定义(事件=无): c、 解除绑定(“”) c、 配置(背景=“红色”) c、 之后(延迟,启用_绑定) def enable_binding(): c、 配置(背景=“绿色”) c、 绑定(“”,单击时)
单击时,将调用函数并更改颜色并取消绑定事件。然后,事件循环有机会处理颜色更改和处理其他事件。一旦时间过去,您的函数将被调用,事件将被重新绑定。

谢谢!这解决了问题,甚至减少了我的代码,谢谢你这么快回答。