python-3.x - 问题:只能同时检查多个检查按钮吗?
问题描述
我想为多个项目生成检查按钮。由于重复,我使用循环来初始化小部件和默认状态,将 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()
解决方案
正如上面评论中所指定的,您需要使用列表推导式或列表来创建您的 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()
推荐阅读
- c# - 如何使用只承认一个旋转轴的 transform.forward?
- sql - 只从数据库中获取周末数据记录?
- reactjs - 如何在 react-chartjs-2 中设置下限和上限?
- python - 将python输入与mysql数据库进行比较
- java - DTO 未通过(spring mvc)
- python - 在 S3 文件更改时更新 AWS EB 应用程序
- python - 如何将您自己的类别添加到 OneHotEncoder
- php - Laravel:将联系表单数据获取到通知门面邮件中
- javascript - 创建一个链接以下载图像
- java - Spring Data ElasticSearch:索引字段必须是关键字而不是文本