2015-06-09 104 views
2

我試圖禁用幀中的所有的(TTK)的小工具,但現在看來,規模小部件是給我一些麻煩,因爲它會引發以下異常:禁用的Tkinter TTK比例構件

_tkinter.TclError: unknown option "-state"

一些相關代碼:

import tkinter as tk 
from tkinter import ttk 

def disable_widgets(parent): 
    for child in parent.winfo_children(): 
     child.config(state = 'disabled') 

root = tk.Tk() 

# Frame full of widgets to toggle 
frame_of_widgets = ttk.Frame(root) 
frame_of_widgets.pack() 

# Button to be disabled 
button_to_disable = ttk.Button(frame_of_widgets) 
button_to_disable.pack() 

# Entry to be disabled 
entry_to_disable = ttk.Entry(frame_of_widgets) 
entry_to_disable.pack() 

# Scale to be disabled 
scale_to_disable = ttk.Scale(frame_of_widgets) 
scale_to_disable.pack() 

# Button that disables widgets in frame 
disable_button = ttk.Button(root,text="Disable",command= lambda: disable_widgets(frame_of_widgets)) 
disable_button.pack() 

root.mainloop() 

它適用於按鈕和入口,而不是規模。我認爲ttk的好處之一就是通過常用的方法和屬性使小部件更加統一,所以我猜測也許我錯誤地訪問了所有這三個小部件?

在此先感謝您的幫助!

回答

4

對於ttk小部件,您使用state方法。按鈕和輸入小部件的方法state只是一個方便的功能來模仿標準的按鈕和輸入小部件。

你可以重寫你的函數是這樣的:

def disable_widgets(parent): 
    for child in parent.winfo_children(): 
     child.state(["disabled"]) 

TTK狀態的TTK文檔中提到了這裏(雖然沒用上的說明邊框):https://docs.python.org/3.1/library/tkinter.ttk.html#widget-states

+1

這正是我需要的,謝謝! 我以前曾嘗試child.state('禁用'),這似乎也適用於按鈕和條目,但不適用於比例。事實證明,它是一個列表做的伎倆。另外有趣的是,它似乎'正常'和'啓用'似乎也無法正常工作,因爲我需要使用'!disabled'。再次感謝你! – Msg