Каждый учебник tkinter Я видел утверждения, что tkinter.mainloop
должен вызываться для окон, которые нужно нарисовать, и событий, которые нужно обработать, и они всегда называют эту функцию даже в приветственных программах мира. Однако, когда я пытаюсь выполнить их в интерактивной оболочке, окна рисуются правильно, без вызова mainloop. This example встраивания графики matplotlib в tkinter создает относительно сложное приложение с кнопками для панорамирования, масштабирования и изменения размера графика в окне tkinter, и снова это все работает, если вы удалите вызов mainloop и запустите код в интерактивной оболочке. Конечно, если я запустил скрипт (с удалением mainloop) вне интерактивной оболочки, программа закончится слишком быстро, чтобы узнать, что произойдет, но если я добавлю вызов input
, чтобы держать программу открытой, все работает правильно (я запускаю python 3.2.2 на linux).Когда мне нужно вызвать mainloop в приложении Tkinter?
Так что же конкретно делает mainloop, и когда это необходимо назвать?
EDIT: Чтобы уточнить, если я открываю терминал GNOME и введите
$python3
>>> import tkinter
>>> root = tkinter.Tk()
сразу появляется окно без вызова MainLoop, и более сложные функциональные Tkinter, кажется, работает, как хорошо (например, добавление кнопок в окно). В IDLE необходим вызов mainloop. Насколько я понимаю, ничто не должно быть нарисовано, и никакие события не должны обрабатываться до тех пор, пока не назовут mainloop.
К сожалению, я уже говорил: я только с помощью стандартной оболочки Python (не IDLE) в терминале GNOME (который, очевидно, написан в C). Итак, насколько я вижу, ничто, кроме моего собственного кода, не должно делать ничего, что влияет на tkinter. – James
Я только что пробовал одно и то же в IDLE, и я не получаю такого же поведения - окна не появляются, пока я не позвоню mainloop. – James