2014-02-10 248 views
7

我想根據某些內部邏輯來更改ttk.Button的狀態。我創建了一個按鈕,並與它的風格聯繫起來:Python:ttk:禁用/啓用按鈕

cardBtnStyle = ttk.Style() 
cardBtnStyle.configure('CB.TButton') 
cardBtn = ttk.Button(top, text="Make SD card", style='CB.TButton', command = cardCreateCallBack).grid(column=1, row=5) 

以下聲明沒有影響:

style.configure('CB.TButton', state='disabled') 

但是,當我創建這樣一個按鈕,它已被禁用:

cardBtn = ttk.Button(top, text="Make SD card", style='CB.TButton', state='disabled', command = cardCreateCallBack).grid(column=1, row=5) 

如何在Python中更改ttk.Button狀態?

操作系統:Ubuntu的13.10

的Python:2.7.5+

回答

9

按鈕狀態不是它的風格的一部分。您可以使用state()方法進行修改:

cardBtn.state(["disabled"]) # Disable the button. 
cardBtn.state(["!disabled"]) # Enable the button. 
+0

我獲得以下錯誤:異常在Tkinter的回調 回溯(最近通話最後一個): 文件「/usr/lib/python2.7/lib-tk/ (* args) 文件「/usr/lib/python2.7/lib-tk/Tkinter.py」,第534行,在callit中 func(* args)第1473行,在__call__中 返回self.func ) 文件「./viaVPN-Production.py」,第42行,在state_thread中 cardBtn.state([「disabled」]) AttributeError:'NoneType'對象沒有'state'屬性 – yegorich

+1

@yegorich,錯誤消息的意思是那個'cardBtn'設置爲「無」。然而,你的問題中的代碼爲它分配了一個'ttk.Button'的實例,所以它不應該是這種情況。在初始化按鈕實例後仔細檢查你是否調用了'state()'。 –

+2

我想我已經發現了這個問題:如果你立即放置它('.grid()'或'.pack()'),你就不能創建一個對象。它必須分兩個階段完成:創建一個對象然後放置它。這樣你可以使用它的手柄。 – yegorich