2015-03-13 2 views
0

Я запускаю скрипт с tkinter, который захватывает пользовательский ввод, а затем открывает второе и, возможно, третье окно на основе ввода. Проблема, с которой я сталкиваюсь, заключается в захвате ввода пользователя из третьего и последнего окна. Каждое окно разбивается на собственный класс python при выполнении.capture tkinter checkbox input

Вот код, который вызывает третье окно, который выполняет должным образом:

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 

исполнения Everytime получает заявление для печати он печатает пустой список, есть ли ящики проверки или нет. Если я назову dir(test_assign) для тестирования, у вас есть флажок attrs. Не знаю, почему я не могу это сделать.

Может ли кто-нибудь увидеть недостаток в моем коде?

ответ

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 с для чтения значения.)

+0

лол ... спасибо !! Я попробую прямо сейчас и приму ваш ответ в мин. – ionalchemist

Смежные вопросы