tkinter 遍历获取多个Checkbutton的值(选中或未选中)

创建等长的变量列表以达到遍历获取Checkbutton状态值的效果

起初,我是想绕过给Checkbutton定义变量并且不给其variable定义变量名,直接获取多个Checkbutton的选中状态,发现只能成功一半,结果见下

from tkinter import *

root = Tk()

items = {'python': 1, 'perl': 2, 'C': 3, 'R': 4}
vars = []
for i in range(len(items)):
    vars.append(IntVar())
print(vars)
for var in vars:
    print(var.get())
for key, value in items.items():
    Checkbutton(root, text=key, onvalue=value, variable=vars[list(items.keys()).index(key)]).grid(sticky=W)


def show():
    for new_var in vars:
        print(new_var.get())


Button(root, text='Show', command=show).grid(sticky=W)

root.mainloop()
  • 可以看到,我用字典的键值对创建多个Checkbutton组件
items = {'python': 1, 'perl': 2, 'C': 3, 'R': 4}
  • 因为无法给这些Checkbutton定义变量名,所以我创建一个相同长度的变量列表,利用索引将组件和变量绑定
vars = []
for i in range(len(items)):
    vars.append(IntVar())
print(vars)
  • 下面是创建的变量列表,可以看到没有重复
[<tkinter.IntVar object at 0x00000282B8C54CD0>, <tkinter.IntVar object at 0x00000282B8CB5970>, <tkinter.IntVar object at 0x00000282B8CB5A00>, <tkinter.IntVar object at 0x00000282B8CB5880>]
  • 并且,可以先看一下所有Checkbutton的初始状态,即未选中时的值。
for var in vars:
    print(var.get())
  • 接着,对字典键值对遍历并创建Checkbutton组件,利用key的索引将变量列表绑定到各个Checkbutton
for key, value in items.items():
    Checkbutton(root, text=key, onvalue=value, variable=vars[list(items.keys()).index(key)]).grid(sticky=W)

因为无法直接对字典使用index,索引退而求其次,使用了key,当然也可以用value

以上,就可以给每个Checkbutton绑定一个IntVar变量,这些变量储存在变量列表vars里,后续只需要读取vars就可以获取所有Checkbutton的选中情况以及值

这里我创建了一个Button用来展示vars列表

def show():
    for new_var in vars:
        print(new_var.get())


Button(root, text='Show', command=show).grid(sticky=W)

运行如下:
可以看到,主窗口里已经创建了Checkbutton和Button,并且输出变量列表vars的对象和Checkbutton的初始值。
在这里插入图片描述
在这里插入图片描述
随便选取几个Checkbutton,点击show,查看vars变化。
在这里插入图片描述
没有问题!

总结:虽然无法对Checkbutton组件直接提取状态值,但在实际应用中,Checkbutton的数量可能是由其他选择决定数量时,这种情况无法用变量名逐一确定Checkbutton,却可以通过变量列表绑定并读取Checkbutton的选中状态,即可达到遍历获取Checkbutton值的效果

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALittleHigh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值