Как отключить / включить ScaleEntry из ttkwidgets? - PullRequest
0 голосов
/ 10 февраля 2020

Я пытался изменить состояние виджета ScaleEntry из пакета ttkwidgets. Изменить состояние записи было достаточно просто.

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

Однако, кажется, что часть масштаба работает по-другому. Я попытался настроить так же, как запись scaleEntry.config_scale(state='disabled'), а также попытался с помощью метода configure. Похоже, что в обоих случаях опция «состояние» неизвестна. Даже если масштабную версию из tkinter можно отключить указанным c способом, масштаб из ttkwidgets, похоже, не работает так же.

1 Ответ

2 голосов
/ 10 февраля 2020

Обновление:

Основываясь на ваших комментариях ниже, вы просматриваете виджеты из библиотеки ttkwidgets.

Исходя из этого, я немного покопался на их сайте документов и в самом коде и найденном не существует определенного способа отключения виджета.

На основе этого раздела кода:

enter image description here

Я могу распечатать все возможные аргументы для 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, я обнаружил следующую строку:

enter image description here

Я понимаю, что мы все еще можем отключить его, ориентируясь на внутренний класс атрибут _scale для победы! Это связано с тем, что в конце дня виджет ScaleEntry представляет собой просто фрейм tk, имеющий 2 атрибута класса. A ttk.Scale и a 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()

Пример перед переключением:

enter image description here

Пример после переключения:

enter image description here

...