使用Tkinter更新复选框结果

时间:2014-03-25 20:58:48

标签: python csv checkbox tkinter

我正在尝试创建一个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]只是列/行设置。

我希望我已经明确表达了我想要实现的目标。感谢您的任何选择:)

1 个答案:

答案 0 :(得分:1)

这有两个原因:

1)变量v的值仅附加到创建的最后一个Checkbutton。 v只是一个变量,无论它创建了多少次,它只需要上次创建它的值。

2)因为这一行:

if v.get():
    tags.append(row[1])

仅在创建Checkbutton时进行评估,而不是在单击它时进行评估。

要解决此问题,您有几种选择。其中一个选项是将command分配给Checkbutton点击,它将参数vrow[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)