我想将 ttk.Checkbutton 小部件设置为其第三个状态。如果我有一个可以设置或清除一组检查按钮的“全部”检查按钮,我希望它在所有检查按钮都已关闭时显示为关闭,如果它们都打开则显示为开启,如果有混合则显示为三态。
我找到了一种使用小部件状态的方法,但是有没有一种方法可以简单地使用附加的 tk.xxVar?以前的答案提到了tristatevalue我还没有找到访问方法。
下面的代码设置为在按下按钮时在 3 个状态之间循环。它的工作原理是将状态更改为“交替”。
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()
感谢您的任何建议。
编辑以更正错别字。
慕少森
相关分类