Question

Je veux juste l'équivalent de la fermeture et la réouverture de mon programme principal. Je veux l'appeler quand une « nouvelle option » -comme dans un menu déroulant est cliqué. Quelque chose comme appeler root.destroy (), puis ré-initier le mainloop.

Comment puis-je obtenir ce fait?

Était-ce utile?

La solution

Vous pouvez prendre toute votre logique de construction graphique et le code d'état initial de la mainloop et le mettre en fonctions. Appelez ces fonctions de la boucle principale (quelque chose comme: buildgui () et initstate ()) puis, lorsque l'utilisateur clique sur l'icône de votre menu, il suffit d'appeler initstate () pour le mettre en arrière comme il était quand l'application a commencé

Autres conseils

Il y a au moins trois façons dont vous pouvez résoudre ce problème.

méthode: la fausse tête . Lorsque vous créez votre application, ne mettez pas tous les widgets dans la fenêtre racine. Au lieu de cela, cacher la fenêtre racine et créer une nouvelle toplevel qui représente votre application. Lorsque vous redémarrez est juste une question de détruire cette nouvelle toplevel et de refaire toute votre logique de démarrage.

Deuxième méthode: nuke et ouvrir . Similaire au concept, mais un peu différent dans l'exécution. Dans ce modèle, lorsque vous voulez vous redémarrer supprimer simplement tous les widgets dans la fenêtre principale, réinitialiser la géométrie à null (de sorte que la fenêtre sera de nouveau se redimensionner en fonction de son contenu), puis exécutez la logique qui attire tous les autres widgets .

Méthode trois:. si elle a travaillé pour la première fois ... Comme suggéré par Martin v Löwis, ont tout simplement votre programme exec une nouvelle instance du programme, puis la sortie.

Les deux premières méthodes sont potentiellement plus rapides et ont l'avantage (dis?) De préserver l'environnement actuel. Par exemple, vous pouvez enregistrer la copie du presse-papiers, la largeur des colonnes, etc. La troisième méthode garantit absolument une ardoise vierge.

Si vous êtes sous Unix, redémarrez l'application entière avec os.execv. Assurez-vous de passer tous les arguments de ligne de commande, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top