Короткий ответ: это происходит потому, что так было задумано.
В tkinter ничего не происходит, кроме как через цикл обработки событий.Даже такая простая вещь, как появление окна, представляет собой цикл событий, реагирующий на событие.Например, когда вы создаете окно (и при условии, что оно не отозвано), по сути, событие «перерисовываете себя» добавляется в очередь событий.Когда вы запускаете цикл обработки событий, это одно из первых событий, которое он обрабатывает, и появляется окно.
Когда вы вызываете mainloop()
, это заставляет цикл обработки событий обрабатывать события.Он предназначен для начала обработки событий и не возвращается до тех пор, пока корневое окно не будет уничтожено.Вот почему вызов mainloop
, как правило, является последней строкой кода в файле, поскольку после закрытия окна обычно ничего не остается сделать.
Другой способ обработки событий - это вызовupdate
или update_idletasks
.update
запустит цикл обработки событий и вернется после обработки всех ожидающих событий (т. Е. Он не ожидает разрушения окна).update_idletasks
аналогичен, но обновляет только «незанятые» события: события, запланированные на after
, события, связанные с перерисовкой окон, и некоторые другие.Он не обрабатывает пользовательские события, такие как щелчки мыши и кнопки.