如何在 Tkinter 中设置火柴盒,以便“全部匹配”工作,但是当我想按下集合中的任何火柴盒时,我可以打破规则吗?

问题描述

我的问题是:我不知道如何设置我的 Checkbutton 以使 Checkbutton 之一可以匹配所有框(这部分已完成),但是当我想要无与伦比的任何其他框,这是可能的。当我使用“所有框”选项运行我的代码部分时,我可以“全部选中”它们,或者全部取下,但是在按下“所有框”按钮后,我无法取消选中“所有框”以外的任何其他框所有盒子”。

我的代码一个关键部分:

onevar = tk.BooleanVar(value=False)
def select_all(): # select all `tk.Checkbutton`
    check_buttons_list = [twovar,threevar,fourvar,fivevar,sixvar,sevenvar]
    for name in check_buttons_list:
        if onevar.get() == True:
            name.set(1)
        if onevar.get() == False:
            name.set(0)

        #below the problem,I don't kNow what should I write here:
        if name.get() != onevar.set():
            return name.set()

twovar = tk.BooleanVar(value=True)
threevar = tk.BooleanVar(value=True)
fourvar = tk.BooleanVar(value=True)
fivevar = tk.BooleanVar(value=True)
sixvar = tk.BooleanVar(value=True)
sevenvar = tk.BooleanVar(value=True)

one = tk.Checkbutton(
        content,text="Match ALL",variable=onevar,onvalue=True,bg="red",fg="black",command=select_all,font=font.Font(family='Helvetica',size="9",weight='bold')
        )
two = tk.Checkbutton(content,text="Box1",variable=twovar,command=select_all)
three = tk.Checkbutton(content,text="Box2",variable=threevar,command=select_all)
four = tk.Checkbutton(content,text="Box3",variable=fourvar,command=select_all)
five = tk.Checkbutton(content,text="Box4",variable=fivevar,command=select_all)
six = tk.Checkbutton(content,text="Box5",variable=sixvar,command=select_all)
seven = tk.Checkbutton(content,text="Box6",variable=sevenvar,command=select_all)

enter image description here

解决方法

检查按钮 one 的更改使其调用函数 choose 而不是直接调用 select_all,从而可以处理 return 的结果。


def select_all(): # select all `tk.Checkbutton`
    check_buttons_list = [twovar,threevar,fourvar,fivevar,sixvar,sevenvar]
    one_test = onevar.get()
    result = []
    for name in check_buttons_list:
        ##below the problem,I don't know what should I write here:
        if name.get() == one_test:
            result.append( name.get() )
        else:
            result.append( None )        
    return result
            

def choose( ):
    result = select_all()
    if result:
        print( result )

您需要将 one command 更改为 command = choose

只是一个附带问题,定义字体的方法比您选择的方法要简单得多。

font = "Helvetica 9 bold" 会起作用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...