首页 > 解决方案 > 问题:只能同时检查多个检查按钮吗?

问题描述

我想为多个项目生成检查按钮。由于重复,我使用循环来初始化小部件和默认状态,将 BooleanVar() 和小部件保存在单独的列表中。但是通过这样做,我只能同时选中或取消选中所有这些。

我已经尝试在循环内为列表中的 BooleanVar 设置不同的值,但无济于事。

ckbtnVarList = [tk.BooleanVar()]*len(ckbtnDict["Tag"])
ckbtnWdtList = [None]*len(ckbtnDict["Tag"])

for idx in range(len(ckbtnDict["Tag"])):
    ckbtnVarList[idx].set(1)
    ckbtnWdtList[idx]=ttk.Checkbutton(mainfrm, text=ckbtnDict["Text"][idx], variable=ckbtnVarList[idx]).pack()

标签: python-3.xtkinter

解决方案


正如上面评论中所指定的,您需要使用列表推导式或列表来创建您的 BooleanVar 列表。下面的代码显示了如何做到这一点。由于您没有提供完整的代码示例,因此我不得不对您的输入数据做出一些假设。

import tkinter as tk

ckbtnDict = {}
ckbtnDict['Tag'] = ["Tag1","Tag2","Tag3"]
ckbtnDict["Text"] = ["Txt1","Txt2","Txt3"]

mainfrm = tk.Tk()
ckbtnVarList = [tk.BooleanVar() for i in range(len(ckbtnDict["Tag"]))]
ckbtnWdtList = [None for i in range(len(ckbtnDict["Tag"]))]

for idx in range(len(ckbtnDict["Tag"])):
    ckbtnVarList[idx].set(1)
    ckbtnWdtList[idx]=tk.Checkbutton(mainfrm, text=ckbtnDict["Text"][idx], variable=ckbtnVarList[idx])
    ckbrnWdtList[idx].pack()

mainfrm.mainloop()

推荐阅读