Сброс основного окна графического интерфейса - PullRequest
3 голосов
/ 09 апреля 2009

Мне просто нужен эквивалент закрытия и повторного открытия моей основной программы. Я хочу вызвать его, когда нажата «новая» опция из выпадающего меню. Что-то вроде вызова root.destroy () и повторной инициализации mainloop.

Как мне это сделать?

Ответы [ 3 ]

4 голосов
/ 09 апреля 2009

Есть как минимум три способа решить эту проблему.

Способ первый: Голова подделка . При создании приложения не помещайте все виджеты в корневое окно. Вместо этого скройте корневое окно и создайте новый верхний уровень, который представляет ваше приложение. При перезапуске это просто вопрос разрушения этого нового верхнего уровня и повторного запуска всей логики запуска.

Второй метод: Nuke and Pave . Схожий по концепции, но немного другой по исполнению. В этой модели, когда вы хотите перезапустить, вы просто удаляете все виджеты в главном окне, сбрасываете геометрию в ноль (чтобы окно снова изменило размер в зависимости от его содержимого), а затем запускаете логику, которая рисует все остальные виджеты .

Метод третий: если это сработало в первый раз ... Как предложено Martin v. Löwis, просто попросите вашу программу запустить новый экземпляр программы, а затем закройте.

Первые два метода потенциально быстрее и имеют (не?) Преимущество в сохранении текущей среды. Например, вы можете сохранить копию буфера обмена, ширину столбцов и т. Д. Третий метод абсолютно гарантирует чистый лист.

2 голосов
/ 09 апреля 2009

Если вы работаете в Unix, перезапустите все приложение с помощью os.execv. Убедитесь, что вы передали все аргументы командной строки и т. Д.

1 голос
/ 09 апреля 2009

Вы можете взять всю свою логику построения GUI и исходный код состояния из основного цикла и поместить его в функции. Вызовите эти функции из основного цикла (что-то вроде: buildgui () & initstate ()), а затем, когда пользователь щелкает значок вашего меню, просто вызовите initstate (), чтобы вернуть его обратно, как это было при первом запуске приложения.

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