【问题标题】:Using Tkinter to update checkbox results使用 Tkinter 更新复选框结果
【发布时间】:2014-03-25 20:58:48
【问题描述】:

我正在尝试创建一个 GUI,其中复选框是基于 CSV 文件创建的,因此每个选项都有一个附加的值。我需要一种方法,以便在选择一个选项时,将该框的值附加到一个列表中,该列表可以求和并用于进一步计算。

这是复选框生成:

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])

其中“tags”是要填充的列表,其值来自 row[1]。 row[3] 和 row[4] 只是列/行设置。

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

【问题讨论】:

  • 您有具体的编程问题吗?
  • 我想知道为什么我使用的方法不起作用,即如果复选框已被填写,则将关联的值附加到“标签”。谢谢

标签: python csv checkbox tkinter


【解决方案1】:

它不起作用有两个原因:

1) 变量v 的值只会附加到创建的最后一个检查按钮。 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2012-11-20
    • 1970-01-01
    • 2017-05-19
    相关资源
    最近更新 更多