В каждом уроке 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, и более сложные функции tkinter, кажется, также работают (например, добавление кнопок в окно).В IDLE вызов mainloop необходим.Насколько я понимаю, ничто не должно быть нарисовано, и никакие события не должны обрабатываться, пока не будет вызван mainloop.