禁用tkinter ttkscale小部件



我试图禁用框架中的所有(ttk)小部件,但似乎scale小部件给我带来了一些麻烦,因为它抛出了以下异常:

_tkinter。TclError:未知选项"-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'

您可以考虑将断点设置在类Scale (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)

相关内容

  • 没有找到相关文章

最新更新