2009-04-08 2 views
3

Ich möchte nur das Äquivalent zum Schließen und erneuten Öffnen meines Hauptprogramms. Ich möchte es aufrufen, wenn eine "neue" Option aus einem Dropdown-Menü angeklickt wird. So etwas wie root.destroy() aufrufen und dann den Mainloop neu initiieren.Zurücksetzen des Haupt-GUI-Fensters

Wie kann ich das schaffen?

Antwort

1

Sie könnten Ihre gesamte GUI-Aufbaulogik und Ihren anfänglichen Statuscode aus dem Hauptknoten entfernen und in Funktionen einfügen. Rufen Sie diese Funktionen von der Hauptschleife (etwas wie: buildgui() & initstate()) und dann, wenn der Benutzer auf Ihr Menü-Symbol klickt, nur initstate(), um es zurückzusetzen, wie es war, als die Anwendung zuerst gestartet wurde.

2

Wenn Sie unter Unix sind, starten Sie die gesamte Anwendung mit os.exec neu. Stellen Sie sicher, dass Sie alle Befehlszeilenargumente usw. übergeben.

+0

+1: Clever; tatsächlich neu starten statt äquivalent zum Neustart. –

3

Es gibt mindestens drei Möglichkeiten, wie Sie das lösen können.

Methode eins: der Kopf gefälscht. Wenn Sie Ihre App erstellen, fügen Sie nicht alle Widgets in das Hauptfenster ein. Verstecken Sie stattdessen das Hauptfenster und erstellen Sie ein neues Toplevel, das Ihre Anwendung darstellt. Wenn Sie neu starten, ist es nur eine Frage des Zerstörens dieses neuen Toplevels und der erneuten Ausführung all Ihrer Startlogik.

Methode zwei: Nuke und ebnen. Ähnlich im Konzept, aber etwas anders in der Ausführung. Wenn Sie in diesem Modell neu starten möchten, löschen Sie einfach alle Widgets im Hauptfenster, setzen die Geometrie auf null zurück (so wird das Fenster wieder auf der Basis des Inhalts angepasst) und dann die Logik ausführen, die alle anderen Widgets zeichnet .

Methode drei: Wenn es das erste Mal funktioniert ... Wie von Martin v. Löwis vorgeschlagen, einfach Ihr Programm eine neue Instanz des Programms ausführen, dann beenden.

Die ersten beiden Methoden sind möglicherweise schneller und haben den (ungünstigen) Vorteil, die aktuelle Umgebung zu erhalten. Zum Beispiel könnten Sie die Kopie der Zwischenablage, Spaltenbreiten usw. speichern. Die dritte Methode garantiert absolut eine unbeschriebene Tafel.