收集由for循环创建的多个tkinter复选框的输入

时间:2020-07-20 17:05:17

标签: python-3.x tkinter checkbox

我用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”中定义一个变量,然后使用具有“ variable.get()”的“ show():”函数调用该变量来逃脱现实。内。如果有人可以给我指出正确的方向,或者我该如何进行。谢谢,非常感谢。

1 个答案:

答案 0 :(得分: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}")