Neustart
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.
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:@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()
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?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?
@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_())