Почему Tkinter.Tk () не открывает окно сразу? - PullRequest
0 голосов
/ 23 ноября 2018

Я использую Tkinter в python 2.7, и я заметил, что иногда корневое окно не открывается, пока я не запускаю метод mainloop.Кроме того, в тех случаях, когда закрывается окно, программа завершается (root.mainloop - последняя строка в коде), а в других случаях этого не происходит.

Почему это происходит?

1 Ответ

0 голосов
/ 23 ноября 2018

Короткий ответ: это происходит потому, что так было задумано.

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

Когда вы вызываете mainloop(), это заставляет цикл обработки событий обрабатывать события.Он предназначен для начала обработки событий и не возвращается до тех пор, пока корневое окно не будет уничтожено.Вот почему вызов mainloop, как правило, является последней строкой кода в файле, поскольку после закрытия окна обычно ничего не остается сделать.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...