2017-06-14 88 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'完成的綁定。 –