В каждом учебнике tkinter я видел утверждения, что tkinter.mainloop
должен быть вызван для окон, которые нужно рисовать, и событий, которые нужно обработать, и они всегда называют эту функцию даже в приветственных программах мира. Однако, когда я пытаюсь выполнить их в интерактивной оболочке, окна рисуются правильно, без вызова mainloop. Этот пример встраивания графики matplotlib в tkinter создает относительно сложное приложение с кнопками для панорамирования, масштабирования и изменения размера графика в окне tkinter и снова, это все работает, если вы удалите вызов mainloop и запустите код в интерактивной оболочке. Конечно, если я запустил script (с удалением mainloop) вне интерактивной оболочки, программа закончится слишком быстро, чтобы узнать, что произойдет, но если я добавлю вызов input
, чтобы открыть программу, все работает правильно (I 'm запускает python 3.2.2 на linux).
Итак, что именно делает mainloop, и когда нужно называть его?
EDIT: Чтобы уточнить, если я открою терминал GNOME и наберите
$python3
>>> import tkinter
>>> root = tkinter.Tk()
сразу появляется окно без вызова mainloop, и более сложная функциональность tkinter, похоже, работает (например, добавление кнопок в окно). В IDLE необходим вызов mainloop. Насколько я понимаю, ничто не должно быть нарисовано, и никакие события не должны обрабатываться, пока не называется mainloop.