我正在使用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)
进行测试,那么复选框就在那里。不知道为什么我无法像这样捕获它。
有人能看到我代码中的缺陷吗?
答案 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
来阅读该值。)