【问题标题】:Gather input from multiple tkinter checkboxes created by a for loop从 for 循环创建的多个 tkinter 复选框收集输入
【发布时间】:2021-11-22 04:32:50
【问题描述】:

我使用 tkinter 创建了一个应用程序,它为某些数据创建了一个复选框列表。复选框是根据数据集的大小动态创建的。我想知道一种获取每个特定复选框输入的方法。

这是我的代码,你应该可以运行它。

from tkinter import *

root = Tk()

height = 21
width = 5

for i in range(1, height):
    placeholder_check_gen = Checkbutton(root)
    placeholder_check_gen.grid(row=i, column=3, sticky="nsew", pady=1, padx=1)

for i in range(1, height):
    placeholder_scope = Checkbutton(root)
    placeholder_scope.grid(row=i, column=4, sticky="nsew", pady=1, padx=1)

root.mainloop()

我查看了其他答案,有些人通过在复选框设置“variable=x”中定义一个变量,然后使用“show():”函数调用该变量来逃脱,该函数将具有“variable.get()”里面。如果有人可以请指出我正确的方向或我如何在这里进行。谢谢你,非常感谢。

【问题讨论】:

  • 如果您将此代码缩减为 minimal reproducible example,将会有所帮助。例如,如果问题是关于从循环中创建的检查按钮中获取值,那么我们不需要在循环中创建标签、菜单或其他框架。此外,您的代码有缩进错误。
  • @BryanOakley 谢谢你的建议。我按照您的建议将代码更新为最少。另外,感谢您在下面的回答。

标签: python-3.x tkinter checkbox


【解决方案1】:

通常您需要为每个复选按钮创建IntVarStringVar 的实例。您可以将它们存储在列表或字典中,然后以通常的方式检索值。如果您不创建这些变量,它们将自动为您创建。在这种情况下,您需要保存对每个检查按钮的引用。

这是保存参考的一种方法:

self.general_checkbuttons = {}
for i in range(1, self.height):
    cb = Checkbutton(self.new_window)
    cb.grid(row=i, column=3, sticky="nsew", pady=1, padx=1)
    self.general_checkbuttons[i] = cb

然后,您可以遍历相同的范围以获取值。为此,我们首先向小部件询问其关联变量的名称,然后使用 tkinter 的 getvar 方法获取该变量的值。

for i in range(1, self.height):
    cb = self.general_checkbuttons[i]
    varname = cb.cget("variable")
    value = self.root.getvar(varname)
    print(f"{i}: {value}")

【讨论】:

  • 感谢您的解决方案和解释!效果很好
猜你喜欢
  • 1970-01-01
  • 2020-11-22
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多