使用链接变量配对和取消配对 Tk CheckButtons

问题描述

我需要在我正在处理的 GUI 中配对和取消配对 CheckButton。即,使它们在按下时具有相同的状态,或者使它们独立。我试图通过更改 CheckButton 的链接变量(不是值而是变量本身)来实现这一点,如下面的最小示例所示:

from tkinter import *
from tkinter import ttk
v0=Tk()
bv_c1= [Intvar(value=1),Intvar(value=1)]
#bv_c1[0]=bv_c1[1]

btn_c1=[]
for i in range(2):
    a=ttk.Checkbutton(v0,variable=bv_c1[i])
    btn_c1.append(a)
    a.grid(row=1,column=i,padx=16,pady=16)

#bv_c1[0]=bv_c1[1]
v0.mainloop()

注释行的目的是使两个按钮的变量指向相同的内存地址(无论它是什么),从而配对两个 CheckButton。当我取消对第一个的注释时,它按预期工作:按下任何一个按钮时,按钮的状态保持配对。但是,当我取消注释第二个注释行(并注释第一个)时,按钮保持未配对状态(其中一个以“不确定”状态开始)。由于我需要根据环境对它们进行配对/取消配对,因此我需要在按钮定义之后进行更改 ,这是取消注释第二条注释行时的情况。

我的问题是:我如何才能配对/取消配对按钮,如果可能,我做错了什么。

此外:我取消按钮配对的计划是通过执行类似于上面第 5 行的行来重建 BooleanVars(或 Intvars,都尝试过)bv_c1[] 的数组,这似乎也不起作用。也许是因为我的同样误解?

编辑: 根据 TheLizzard 的正确答案(谢谢!),我详细说明了以下工作代码,以防万一它可能对某人有所帮助。下部 CheckButtons 是否配对取决于上部 CheckButtons 中选择的值(我知道全局变量和按钮可以避免,但它只显示功能)。

from tkinter import *
from tkinter import ttk

def done():
    global btn_c1,bv_c1
    if bv_c0[0].get():  # couple
        btn_c1[0].config(variable=bv_c1[1])
    else:               # uncouple
        btn_c1[0].config(variable=bv_c1[0])

v0=Tk()

bv_c0=[BooleanVar(value=True)]
btn_c0= ttk.Checkbutton(v0,variable=bv_c0[0])
btn_c0.grid(row=0,column=0)

ttk.Button(v0,text='done',command=done).grid(row=0,column=1)

bv_c1= [BooleanVar(value=True),BooleanVar(value=True)]
btn_c1=[]
for i in range(2):
    a=ttk.Checkbutton(v0,padx=6)

v0.mainloop()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)