Когда нужно вызывать mainloop в приложении Tkinter?

Каждый учебник по tkinter, который я видел, утверждает, что tkinter.mainloop должен вызываться для рисования окон и обработки событий, и они всегда вызывают эту функцию, даже в программах hello world. Однако, когда я пробую их в интерактивной оболочке, окна рисуются правильно без необходимости вызова mainloop. Этот пример встраивания графики matplotlib в tkinter создает относительно сложное приложение, с кнопками для панорамирования, масштабирования и изменения размера графика в окне tkinter, и опять же, все это работает, если убрать вызов mainloop и запустить код в интерактивной оболочке. Конечно, если я запускаю скрипт (с удаленным mainloop) вне интерактивной оболочки, программа завершается слишком быстро, чтобы увидеть, что происходит, но если я добавляю вызов input, чтобы держать программу открытой, все работает правильно (я использую python 3.2.2 на linux).

Так что же именно делает mainloop, и когда его нужно вызывать?

EDIT: Чтобы уточнить, если я открою терминал GNOME и наберу

$python3
>>> import tkinter
>>> root = tkinter.Tk()

mainloop, то сразу же появится окно без необходимости вызова mainloop, и более сложные функции tkinter, похоже, тоже работают (например, добавление кнопок в окно). В IDLE вызов mainloop необходим. Насколько я понимаю, ничего не должно рисоваться и никакие события не должны обрабатываться, пока не будет вызван mainloop.

41
задан nbro 20 March 2015 в 02:34
поделиться