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