Есть как минимум три способа решить эту проблему.
Способ первый: Голова подделка . При создании приложения не помещайте все виджеты в корневое окно. Вместо этого скройте корневое окно и создайте новый верхний уровень, который представляет ваше приложение. При перезапуске это просто вопрос разрушения этого нового верхнего уровня и повторного запуска всей логики запуска.
Второй метод: Nuke and Pave . Схожий по концепции, но немного другой по исполнению. В этой модели, когда вы хотите перезапустить, вы просто удаляете все виджеты в главном окне, сбрасываете геометрию в ноль (чтобы окно снова изменило размер в зависимости от его содержимого), а затем запускаете логику, которая рисует все остальные виджеты .
Метод третий: если это сработало в первый раз ... Как предложено Martin v. Löwis, просто попросите вашу программу запустить новый экземпляр программы, а затем закройте.
Первые два метода потенциально быстрее и имеют (не?) Преимущество в сохранении текущей среды. Например, вы можете сохранить копию буфера обмена, ширину столбцов и т. Д. Третий метод абсолютно гарантирует чистый лист.