将 ttk.Checkbutton 设置为既不开也不关,三态

我想将 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()

感谢您的任何建议。


编辑以更正错别字。


12345678_0001
浏览 275回答 1
1回答

慕少森

该tristate选项仅适用于 tkinter 复选按钮,不适用于 ttk 复选按钮。对于 ttk 复选按钮,您可以通过将其状态设置为“交替”来获得第三个状态:the_checkbutton.state(['alternate'])我不确定是否所有 ttk 主题都支持这第三种状态。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python