Frage

Ich will nur das Äquivalent von Schließ- und mein Hauptprogramm wieder zu öffnen. Ich mag es aufzurufen, wenn eine „neue“ -ähnlichen Option aus einem Dropdown-Menü angeklickt wird. So etwas nennen root.destroy () und dann erneut die Einleitung des mainloop.

Wie kann ich das getan?

War es hilfreich?

Lösung

Sie können nehmen alle GUI Gebäude Logik und Ausgangszustand Code aus dem mainloop und steckte es in Funktionen. Rufen Sie diese Funktionen aus dem mainloop (so etwas wie: buildgui () & initstate ()) und dann, wenn der Benutzer das Menüsymbol klickt, rufen Sie einfach initstate (), um es zurückwerfen, wie es war, wenn die Anwendung zum ersten Mal gestartet

Andere Tipps

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

Methode eins: der Kopf gefälschte . Wenn Sie Ihre Anwendung erstellen, setzen Sie nicht alle Widgets im Hauptfenster. Stattdessen versteckt die Root-Fenster und erstellen Sie ein neues Top-Level, die Ihre Anwendung darstellt. Bei einem Neustart ist es nur eine Frage der Zerstörung, dass neuer Toplevel und wieder laufen alle Ihre Start-up-Logik.

Methode zwei: nuke und ebnen . Ähnlich im Konzept aber etwas anders in der Ausführung. In diesem Modell, wenn Sie Sie einfach neu zu starten all Widgets im Hauptfenster löschen, setzen Sie die Geometrie auf null (also das Fenster einmal selbst wieder die Größe auf der Grundlage ihrer Inhalte) und dann die Logik ausführen, die anderen Widgets alle zieht .

Methode drei:. , wenn es das erste Mal ist ... Wie von Martin v vorgeschlagen Löwis, einfach Ihr Programm eine neue Instanz des Programms exec, dann beenden.

Die ersten beiden Methoden sind potenziell schneller und haben den (dis?) Vorteil der Umwelt zu erhalten. Zum Beispiel könnten Sie die Kopie der Zwischenablage, Spaltenbreiten speichern usw. Die dritte Methode absolut garantiert ein unbeschriebenes Blatt.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top