0

我试图从包中更改ScaleEntry小部件的状态。ttkwidgets更改条目的状态很容易。

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

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

4

1 回答 1

2

更新:

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

基于此,我对他们的文档站点和代码本身进行了一些挖掘,发现没有定义的方法来禁用小部件。

基于这部分代码:

在此处输入图像描述

我可以通过使用打印出 ScaleEntry 的所有可能参数.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 类的代码后,我发现了这一行:

在此处输入图像描述

我意识到我们仍然可以通过针对_scalewin 的内部类属性来禁用它!这是因为归根结底,ScaleEntry小部件只是一个具有 2 个类属性的 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()

切换前的示例:

在此处输入图像描述

切换后的示例:

在此处输入图像描述

于 2020-02-10T18:22:57.297 回答