#python #tkinter #tk #ttk
#python #tkinter #tk-toolkit #ttk
Вопрос:
Я пытаюсь изменить состояние ttk.button (в начале mainloop) в tkinter, как в этом руководстве [актуализация: на самом деле здесь .]
import tkinter
from tkinter import ttk
root = tkinter.Tk()
style = ttk.Style()
style.map("C.TButton",
foreground=[('pressed', 'red'), ('active', 'blue')],
background=[('pressed', '!disabled', 'black'), ('active', 'white')]
)
colored_btn = ttk.Button(text="Test", style="C.TButton")
colored_btn.pack()
colored_btn.state('pressed')
root.mainloop()
Результат ошибки:
in state return self.tk.splitlist(str(self.tk.call(self._w, "state", statespec))) _tkinter.TclError: Invalid state name p
Комментарии:
1. Ссылка в вашем вопросе не работает.
2. Я обновил его.
Ответ №1:
colored_btn.state(('pressed',))
спецификация состояния обычно представляет собой список или кортеж.
Я полагаю, что эта проблема возникает из-за разницы в версиях 8.6 и 8.5 tkinter.
Обратите внимание, что в руководстве, связанном с вопросом (tkinter 8.5), есть stateSpac
аргумент, а в tkinter 8.6 — statespec
. Такие вещи всегда должны предупреждать вас о том, что в версиях могут быть изменения.
Комментарии:
1. На мой взгляд, «обычно» — это глупое утверждение для ссылки вручную
2. Фактически подойдет любая итерация.