Seite 1 von 1

PyQt 5 - Kernel dies bei jedem Zweiten Run

Verfasst: Mittwoch 2. April 2025, 07:44
von GMAch
Hallo probier gerade zum ersten mal eine GUI mit PyQt zu basteln, und hab eine Anfägerfrage.

Wenn ich mein Skript so aufbaue, wie es in in den Büchern die ich über Qt habe gezeigt wird, "stirbt" der Kernel in Spyder bei jedem zweiten Durchlauf.

Das hat dann die Form

Code: Alles auswählen

class GUI(QDialog):
	[...]

if __name__=="__main__":
    app = QApplication(sys.argv)
    w = GUI()
    w.show()
    sys.exit(app.exec_())
Mit etwas googlen hab ich heraus gefunden, dass das wohl daran liegt das die QApplication Instanz nach Beendigung des Skrips noch weiter läuft, und man keine zweite öffnen kann.

Der gängige Workaround scheint der folgenden zu sein "app = QApplication.instance()" mit dem folgenden zu ersetzen.

Code: Alles auswählen

    app = QApplication.instance()
    if app is None:
        app = QApplication(sys.argv)
Funktionieren tut das bei mir auch aber ist das eine saubere Lösung?

Wäre es nicht besser dafür zu sorgen das die beim Schließen der GUI auch beendet wird?

Und wenn ja wie macht man das?

Re: PyQt 5 - Kernel dies bei jedem Zweiten Run

Verfasst: Mittwoch 2. April 2025, 08:59
von __blackjack__
@GMAch: Das ist nicht sauber. Normal und sauber ist das was in den Büchern steht. Die Lösung ist Spyder nicht zu verwenden, weil ”ewig” laufende Kernel nicht zur Programmentwicklung geeignet sind. Spyder ist zum interaktiven arbeiten mit Daten, nicht um damit eigenständige Programme zu entwickeln.

Re: PyQt 5 - Kernel dies bei jedem Zweiten Run

Verfasst: Mittwoch 2. April 2025, 11:19
von GMAch
@__blackjack__ Ist auch nicht als Dauerlösung gedacht, sondern nur um den code erstmal zu testen.

Für den eigentlichen Gebrauch wird es dann mit dem Pyinstaller in eine .exe umgewandelt.

Besteht dann das Problem auch noch oder ist das ein reines Spyder Problem?

Re: PyQt 5 - Kernel dies bei jedem Zweiten Run

Verfasst: Mittwoch 2. April 2025, 11:57
von __blackjack__
@GMAch: Das ist ein reines Spyder-Problem (und das ähnlicher Umgebungen mit einem Kernel der immer wiederverwendet wird). Kannst Du dort auch einfach umgehen in dem Du das Programm nicht in Spyder startest, sondern ausserhalb, was man zum testen eigentlich bei jeder IDE machen sollte, denn viele IDEs verändern die Laufzeitumgebung mehr oder weniger subtil, und man will ja testen wie sich das Programm eigenständig verhält.