Я хочу установить виджет ttk.Checkbutton в третье состояние.Если у меня есть кнопка «Все», которая может установить или очистить набор кнопок, я хочу, чтобы она отображала «Выкл.», Если все кнопки проверки уже выключены, включена, если они все включены, и состояние «три», если есть микс.
Я нашел способ сделать это, используя состояние виджета, но есть ли способ просто использовать прикрепленный tk.xxVar?В предыдущем ответе упоминалось tristatevalue
, к которому я не нашел способа доступа.
Приведенный ниже код настроен на циклическое переключение трех состояний при нажатии кнопки.Это работает путем изменения состояния на «альтернативный».
import tkinter as tk
from tkinter import ttk
root=tk.Tk()
root.geometry("+50+50")
var=tk.IntVar()
var.set(0)
current_state=tk.StringVar()
text=[' Checkbutton: Off ', ' Checkbutton: On ', ' CB to Third State ']
def label_update():
current_state.set(text[var.get()])
cb=ttk.Checkbutton(root, variable=var, text='Test Box', command=label_update)
cb.grid()
seq=[1,2]
def tick():
""" Sets var (tk.IntVar) to 0, 1, 2 in sequence for each tick """
try:
var.set(seq[var.get()])
if var.get()>1: cb.state(['alternate']) # alternate on
except IndexError:
cb.state(['!alternate']) # alternate off
var.set(0) # reset count
label_update()
ttk.Button(root, text=" Click to cycle through states ", command=tick).grid()
ttk.Label(root, textvariable=current_state).grid()
label_update()
root.title("Checkbutton Issue")
root.mainloop()
Спасибо за любые предложения.
Редактирует, чтобы исправить опечатки.