Neustart

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Was mir noch einfällt: Man könnte auch ganz simpel über Exit-Codes kommunizieren. Der Prozess mit der eigentlichen App beendet sich immer selbst und gibt mittels speziellem Exit-Code an, ob er neugestartet werden möchte. Dies wird vom "äußeren" Prozess ausgewertet und dann ggf der Neustart angewiesen. Dies sollte auch für einen Anfänger recht leicht zu realisieren sein. Also das wäre wahrscheinlich mein bevorzugter Weg, wenn nichts gravierendes dagegen spricht. Es beruht in dem Fall wieder auf der Idee mit den zwei Prozessen.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sophus hat geschrieben:@snafu: Ich habe deinen Ansatz wie folgt umgesetzt:

Code: Alles auswählen

        from subprocess import Popen
        re_start = Popen([sys.executable, '-m', 'xarphus'])
        app.quit()
Und der Code steckt im `xarphus`-Modul oder wie? Man sollte halt darauf achten, dass bei mehreren Neustarts nicht am Ende zig ineinander verschachtelte Python-Prozesse bestehen. Ich habe das Gefühl, genau dies würde bei dir passieren. Denn ein `app.quit()` beendet zwar die GUI, aber eben nicht den Python-Interpreter an sich.
Sophus hat geschrieben:ich hoffe, dass Python hierbei auf xarphus.py, also auf mein Ausgangs-Modul zugreift. Mus ich hierbei nicht die Ordner-Hierarchie angeben, damit Python weißt, weilche Datei gemeint ist?
Durch das "-m" ist es wie ein normaler Import. Wenn Python mittels `import xarphus` das richtige Modul benutzt, dann sollte es auch über die Kommandozeilen-Variante mit `Popen()` funktionieren. Oder hast du zwei verschiedene Versionen des Moduls und möchtest eine ganz bestimmte Version ausführen?
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

@snafu: Nein, der Code steckt nicht in xarphus.py. Wenn du dir mein Screenshot noch einmal anschaust. Der Code steckt in ui_pp_mdi.py. In dieser Datei wird die UI-Datei der MainWindow geladen. Die ui_pp_mdi.py dient außerdem dazu, dass dort die ganzen Trigger und Aktionen der MainWindow verwaltet werden. Dort steckt dann auch der besagte Code in einer Funktion. xarphus.py rühre ich weitestgehend nicht an. Es soll eine Art Index-Datei bleiben. Ich denke hier eher wie in VB6 oder auch PHP. Und deine Bedenken hatte ich auch. Also habe ich meinen Task-Manager geöffnet, und mein Programm mehrmals neugestartet. Die vorherigen Prozesse werden beendet und der neue Prozess entsteht. Also, ich habe am Ende nicht zig Mal das gleiche Programm. Die quit()-Methode verwende ich, weil ich in ui_pp_mdi.py setQuitOnLastWindowClosed (siehe Code) verwende. Ich muss mich also um das Schließen kümmern. Close() würde hier nicht reichen - soll ja auch nicht.

Code: Alles auswählen

app = QApplication(sys.argv)
app.setQuitOnLastWindowClosed(False)
window = Mdi_Main()
sys.exit(app.exec_())
Antworten