Python 如何使用循环从数组创建checkbutton并打印所选checkbutton的值?

Python 如何使用循环从数组创建checkbutton并打印所选checkbutton的值?,python,tkinter,Python,Tkinter,我有一个字符串数组,我希望能够使用循环为它们快速创建许多复选按钮,因为这样做的目的是用户以后可以在数组中添加/删除项目,因此它应该是可调整的 我甚至不确定我尝试使用的方法是否可行。下面代码的问题是,它只检查数组中最后一个checkbutton/最后一个项,因此它总是返回PY_VAR3或“d”等 如果有人能帮助我理解该做什么,那将是令人惊讶的,即使这是一个完整的代码重写。我完全被难住了 from Tkinter import * Window = Tk() class Test: d

我有一个字符串数组,我希望能够使用循环为它们快速创建许多复选按钮,因为这样做的目的是用户以后可以在数组中添加/删除项目,因此它应该是可调整的

我甚至不确定我尝试使用的方法是否可行。下面代码的问题是,它只检查数组中最后一个checkbutton/最后一个项,因此它总是返回PY_VAR3或“d”等

如果有人能帮助我理解该做什么,那将是令人惊讶的,即使这是一个完整的代码重写。我完全被难住了

from Tkinter import *


Window = Tk()

class Test:
    def __init__(self):

        array = ['a', 'b', 'c', 'd']

        def doCheckbutton():
            for i in array:
                self.var = StringVar()
                c = Checkbutton(Window, text='blah', variable=self.var, command=printSelection)
                c.pack()


        def printSelection():
            print(self.var)

        doCheckbutton()

Test()

Window.mainloop()
已解决

from Tkinter import *


Window = Tk()

class Test:
    def __init__(self):

        self.array = ['a', 'b', 'c', 'd']
        self.vars = [] #Array for saved values

        self.doCheckbutton()

    def doCheckbutton(self):
        for i in range(len(self.array)):
            self.vars.append(StringVar()) #create new item in vars array
            c = Checkbutton(Window, text=self.array[i], variable=self.vars[-1], command=lambda i=i: self.printSelection(i), onvalue='on', offvalue='off')
            c.pack()


    def printSelection(self, i):
        print(self.array[i] + ': ' + self.vars[i].get())

Test()

Window.mainloop()
勾选/取消勾选复选按钮时,它会打印以下语句: c:在
c:off

您可以为每个
复选框创建一个
StringVar
并将其保存在列表中,然后使用
StringVar
上的
get
方法获取其值(
lambda
用于传递数组列表中的索引):


我希望这会有帮助。

是的,这很有效!非常感谢你。我对你写的东西做了一点编辑,我将把它添加到原来的文章中。
from Tkinter import *


Window = Tk()

class Test:
    def __init__(self):

        self.array = ['a', 'b', 'c', 'd']
        self.vars = []

        self.doCheckbutton()

    def doCheckbutton(self):
        for i in range(len(self.array)):
            self.vars.append(StringVar())
            self.vars[-1].set(0)
            c = Checkbutton(Window, text=self.array[i], variable=self.vars[-1], command=lambda i=i: self.printSelection(i), onvalue=1, offvalue=0)
            c.pack()


    def printSelection(self, i):
        print(self.vars[i].get())

Test()

Window.mainloop()