捕获tkinter复选框输入

时间:2015-03-13 21:12:18

标签: python checkbox tkinter

我正在使用tkinter运行脚本来捕获用户输入,然后根据输入打开第二个,可能是第三个窗口。我遇到的问题是从第三个和最后一个窗口捕获用户输入。每个窗口在执行时被划分为它自己的python类。

以下是调用第三个窗口的代码,该窗口正确执行:

test_assign = TestAssign(mylist)

这是第三个窗口代码:

class TestAssign:
    def __init__(self, mylist):
        self.mylist = mylist
        self.selected_values = []
        self.master = Tk()
        for i in range(len(mylist)):
             setattr(self, 'item'+mylist[i], IntVar())
             ch = Checkbutton(master, text='item'+mylist[i], variable=getattr(self, 'item'+mylist[i])
             ch.pack()
        b = Button(master, text='Next', command=self.get_selected_values)
        b.pack()

        mainloop()

    def get_selected_values(self):
        for i in range(len(self.mylist)):
            if getattr(self, 'item'+self.mylist[i]) == 1:
                self.selected_values.append(self.mylist[i])
        self.master.destroy()

然后控制返回到呼叫点(至少我相信它会这样)。我尝试打印所选值的位置:

test_assign = TestAssign(mylist)
while not test_assign.selected_values:
    pass
print test_assign.selected_values

每次执行到print语句时,无论是否检查了盒子,它都会打印一个空列表。如果我打电话给dir(test_assign)进行测试,那么复选框就在那里。不知道为什么我无法像这样捕获它。

有人能看到我代码中的缺陷吗?

1 个答案:

答案 0 :(得分:1)

两件事: 1)

ch = Checkbutton(master, text='item'+mylist[i], variable=getattr(self, 'item'+mylist[i])

b = Button(master, text='Next', command=self.get_selected_values)

我认为master应该是self.master(但老实说,这几乎肯定只是一个复制/粘贴错误。)

2)重要的一个:

if getattr(self, 'item'+self.mylist[i]) == 1:

应该是

if getattr(self, 'item'+self.mylist[i]).get() == 1:

(您需要在get上致电IntVar来阅读该值。)