Сброс настроек главного окна графического интерфейса

StackOverflow https://stackoverflow.com/questions/731887

  •  06-09-2019
  •  | 
  •  

Вопрос

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

Как я могу это сделать?

Это было полезно?

Решение

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

Другие советы

Есть по крайней мере три способа, которыми вы можете решить эту проблему.

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

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

Способ третий: если бы это сработало в первый раз... Как было предложено Мартином В.Левис, просто запустите в вашей программе новый экземпляр программы, затем выйдите.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top