微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用链接变量配对和取消配对 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 举报,一经查实,本站将立刻删除。