PyQt 5 - Kernel dies bei jedem Zweiten Run

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
GMAch
User
Beiträge: 31
Registriert: Dienstag 4. September 2018, 07:32

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?
Benutzeravatar
__blackjack__
User
Beiträge: 13905
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
GMAch
User
Beiträge: 31
Registriert: Dienstag 4. September 2018, 07:32

@__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?
Benutzeravatar
__blackjack__
User
Beiträge: 13905
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
Antworten