2013-08-23 4 views
0

У меня возникли проблемы с этим кодом, который не будет выполнять код в определенной точке. Я не могу описать проблему в формулировке, но в коде оставшийся код под window.mainloop() не будет работать так, как мне нужно, если главное окно (gui) не будет закрыто, что является проблематичным. Я хочу иметь возможность print(t.test), когда весь код под def calculate полностью выполнен. Я технически мог это сделать, удалив window.mainloop(), но это запустит код, прежде чем я смогу собрать ввод, который является жизненно важным. Мне нужно сохранить структуру кодирования так же, как показано ниже.tkinter последовательное выполнение заказа

import tkinter 

class Test: 

    def __init__(self): 
    self.test = False 

def calculate(window, userinput, t): 
    test = userinput.get() 
    print(test) 
    window.destroy() 
    t.test = True 

def main(): 

    t = Test() 
    gui = tkinter.Tk() 
    gui.title("example window") 
    gui.geometry("400x400") 

    userinput = tkinter.StringVar() 

    window = tkinter.Toplevel() 
    window.title("Entry") 
    tkinter.Message(window, text="Label", width="200").pack() 
    tkinter.Entry(window, width=30, textvariable=userinput).pack() 
    tkinter.Button(window, text="ok", command=lambda: calculate(window, userinput, t)).pack() 
    window.mainloop() 

    print(t.test) 

    gui.mainloop() 

main() 

EDIT: Кажется, я был в состоянии заставить его вести себя так же, как и держать ту же самую структуру, поставив print(t.test) под своей определенной функции и затем вызвать его под def calculate(userinput, window, t) в последней строке. Я тестировал это, но это заставляет замораживать главное окно.

ответ

0

Путь Tkinter предназначен для работы в том, что вы:

  1. создать виджеты
  2. вызова MainLoop (ровно один раз)
  3. окно разрушается и программа выходит

Вы не должны вызывать mainloop более одного раза, и после вызова mainloop вы не должны иметь больше кода.

Если вы хотите что-то для запуска после вызова MainLoop, планировать его after:

... 
gui.after(1, do_something) 
gui.mainloop() 

Все планироваться after будет работать после запуска MainLoop.

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