我如何 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()
切换前的示例:
切换后的示例:
我试图从 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()
.
示例代码:
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()
切换前的示例:
切换后的示例: