我正在尝试创建一个GUI,其中复选框是基于CSV文件创建的,因此每个选项都附加了一定的值。我需要一种方法使得当选择一个选项时,该框的值将附加到列表中,该列表可以求和并用于进一步计算。
这是Checkbox的生成:
for row in data:
if row[2] == "g":
v=IntVar()
Tkinter.Checkbutton(top,text=row[0],height=1,variable=v).grid(row=(row[3]),column=row[4],sticky=W)
if v.get():
tags.append(row[1])
其中"标签"是要填充的列表,其中包含来自行[1]的值。 row [3]和row [4]只是列/行设置。
我希望我已经明确表达了我想要实现的目标。感谢您的任何选择:)
答案 0 :(得分:1)
这有两个原因:
1)变量v
的值仅附加到创建的最后一个Checkbutton。 v
只是一个变量,无论它创建了多少次,它只需要上次创建它的值。
2)因为这一行:
if v.get():
tags.append(row[1])
仅在创建Checkbutton时进行评估,而不是在单击它时进行评估。
要解决此问题,您有几种选择。其中一个选项是将command
分配给Checkbutton点击,它将参数v
和row[1]
传递给回调函数,然后将row[1]
的值添加到您的列表。
以下是一个示例,您可能需要调整它以适用于您的代码:
def callback(v,rowValue):
if v.get():
tags.append(rowValue)
for row in data:
if row[2] == "g":
v=IntVar()
rowValue = row[1]
c=Checkbutton(root,
text=row[0],
height=1,
variable=v,
command=lambda v=v, rowValue=rowValue: callback(v, rowValue))
c.grid(row=(row[3]),column=row[4],sticky=W)