2017-06-14 87 views
0

如何实际禁用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) 

回答

2

我已经测试过其他小部件,并注意到将状态设置为禁用不会禁用绑定。根据你的情况,至少有两种解决方案:

  • 通过在flip函数结束时通过c.unbind('<1>')更换c.config(state="disabled")取消绑定。

  • 检查画布的状态之前, if c.cget('state') != 'disabled':

+0

感谢翻转的颜色。我也试过tk.Misc.unbind_all <"1>“,但也没有工作,但c.unbind()的工作。谢谢 – ffrree

+0

它没有工作,因为'unbind_all('<1>')'不解除绑定'所有小部件'<1>',但只有用'bind_all'完成的绑定。 –