2015-06-09 2 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'), который также, казалось, работал для кнопки и входа, но не для шкалы. Получается, что это список сделал трюк. Также интересно, что «нормально» и «включено» тоже не работают, поскольку мне нужно использовать «! Disabled». Еще раз спасибо! – Msg

Смежные вопросы