tkinter禁用画布不工作
问题描述:
如何实际禁用Canvas小部件,而不是其中的任何对象,而是整个Canvas。tkinter禁用画布不工作
以下代码尝试在单击并更改其颜色后禁用画布。但是你可以看到,它仍然可以被点击并在黄色和黑色之间点击。
我本来希望在禁用之后,它不会对任何事件作出响应,并且可能会灰掉。
import tkinter as tk
w=tk.Tk()
color="yellow"
def flip(a):
global color
if color=="yellow": color="black"
else: color="yellow"
c.config(bg=color)
c.config(state="disabled") # does not work
c=tk.Canvas(w,width=20, height=20, bg=color)
c.place(x=30, y=30)
c.bind("<1>",flip)
答
我已经测试过其他小部件,并注意到将状态设置为禁用不会禁用绑定。根据你的情况,至少有两种解决方案:
通过在
flip
函数结束时通过c.unbind('<1>')
更换c.config(state="disabled")
取消绑定。检查画布的状态之前,
if c.cget('state') != 'disabled':
感谢翻转的颜色。我也试过tk.Misc.unbind_all “,但也没有工作,但c.unbind()的工作。谢谢 – ffrree
它没有工作,因为'unbind_all('')'不解除绑定'所有小部件'',但只有用'bind_all'完成的绑定。 –