我如何 disable/enable 来自 ttkwidgets 的 ScaleEntry?

How do I disable/enable the ScaleEntry from ttkwidgets?

我试图从 ttkwidgets 包中更改 ScaleEntry 小部件的状态。更改条目的状态非常简单。

scaleEntry.config_entry(state='disabled')
scaleEntry.config_entry(state='!disabled')

但是,缩放部分的工作方式似乎有所不同。我尝试了与条目 scaleEntry.config_scale(state='disabled') 相同的配置方式,也尝试通过 configure 方法进行配置。似乎在这两种情况下, "state" 选项都是未知的。尽管可以通过特定方式禁用来自 tkinter 的缩放版本,但来自 ttkwidgets 的缩放版本似乎无法以相同的方式工作。

更新:

根据您在下面的评论,您正在查看 ttkwidgets 库中的小部件。

基于此,我对他们的 docs site 和代码本身做了一些挖掘,发现没有定义的方法来禁用小部件。

基于这段代码:

我可以使用 .keys().

打印出 ScaleEntry 的所有可能参数

示例代码:

from ttkwidgets import ScaleEntry
import tkinter as tk


window = tk.Tk()
scaleentry = ScaleEntry(window, scalewidth=200, entrywidth=3, from_=0, to=20)
scaleentry.config_entry(justify='center')
print(scaleentry.keys())
scaleentry.pack()
window.mainloop()

主要结果:

['borderwidth', 'class', 'compound', 'cursor', 'entryscalepad', 'entrywidth', 'from', 'height', 'orient', 'padding', 'relief', 'scalewidth', 'style', 'takefocus', 'to', 'width']

从列表中扫描 ScaleEntry 的代码,不存在禁用此比例的参数。所以我几乎得出了不可能的结论。但是,在阅读构成 ScaleEntry class 的代码后,我发现了这一行:

我知道我们仍然可以通过针对内部 class 属性 _scale 来禁用它!这是因为在一天结束时 ScaleEntry 小部件只是一个具有 2 个 class 属性的 tk 框架。一个 ttk.Scale 和一个 ttk.Entry.

示例:

from ttkwidgets import ScaleEntry
import tkinter as tk


window = tk.Tk()
state = True
scaleentry = ScaleEntry(window, scalewidth=200, entrywidth=3, from_=0, to=20)
scaleentry.config_entry(justify='center')
print(scaleentry.keys())
scaleentry.pack()


def toggle_state():
    global state
    if state:
        scaleentry._scale.state(['disabled'])
        scaleentry._entry.state(['disabled'])
        state = False
    else:
        scaleentry._scale.state(['!disabled'])
        scaleentry._entry.state(['!disabled'])
        state = True


tk.Button(window, text='Toggle Scale', command=toggle_state).pack()
window.mainloop()

切换前的示例:

切换后的示例: