禁用 tkinter ttk 缩放小部件
Disabling tkinter ttk scale widget
我试图禁用一个框架中的所有 (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 的好处之一是使小部件与通用方法和属性更加统一,所以我猜我可能错误地访问了所有这三个小部件?
对于 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
另一种方式:
scale_to_disable.configure(state='disabled') # 'normal'
您可以考虑将断点设置在 class 刻度 (from tkinter.ttk import Scale
) 的 configure
处可能会有一些帮助。
以下是拦截class Scale
的部分代码
class Scale(Widget, tkinter.Scale):
...
def configure(self, cnf=None, **kw):
if cnf:
kw.update(cnf)
Widget.configure(self, **kw)
我试图禁用一个框架中的所有 (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 的好处之一是使小部件与通用方法和属性更加统一,所以我猜我可能错误地访问了所有这三个小部件?
对于 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
另一种方式:
scale_to_disable.configure(state='disabled') # 'normal'
您可以考虑将断点设置在 class 刻度 (from tkinter.ttk import Scale
) 的 configure
处可能会有一些帮助。
以下是拦截class Scale
class Scale(Widget, tkinter.Scale):
...
def configure(self, cnf=None, **kw):
if cnf:
kw.update(cnf)
Widget.configure(self, **kw)