2015-06-09 47 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