Ich benutze Python 3 und PyQt5. Hier ist mein Test PyQt5 Programm, konzentrieren sich auf den letzten 2 Zeilen:Sollte ich `app.exec()` oder `app.exec _()` in meiner PyQt-Anwendung verwenden?
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class window(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.setWindowTitle('test')
self.resize(250,200)
app=QApplication(sys.argv)
w=window()
w.show()
sys.exit(app.exec())
#sys.exit(app.exec_())
Ich weiß exec
eine Sprache Schlüsselwort in Python ist. Aber Code auf Official PyQt5 Documentation(speziell die Object Destruction am Exit Teil). Ich sehe, dass dieses Beispiel die Verwendung von app.exec()
zeigt, was mich verwirrt.
Als ich es auf meinem Rechner getestet habe. Ich fand, dass es keinen sichtbaren Unterschied von meinem Ende gibt. Sowohl mit als auch ohne _
erzeugt die gleiche Ausgabe in keiner Zeitdifferenz.
Meine Frage ist:
- Gibt es etwas falsch läuft, wenn ich
app.exec()
verwenden? wie mit Pythons internenexec
kollidieren? Ich vermute, weil beideexec
etwas ausführen. - Wenn nicht, kann ich beide austauschbar verwenden?
In PyQt5 benötigen Sie überhaupt nicht 'sys.exit()'. 'app.exec _()' oder 'app.exec()' alleine ist genug und es funktioniert normal. Sie haben einige Dinge in PyQt5 unter der Haube behoben, so dass Sie diese 'sys.exit()' nicht mehr benötigen. Wenn Sie möchten, dass Ihr Code auf PyQt4 läuft, dann haben Sie 'sys.exit()' dort. Außerdem sind 'app.exec _()' und 'app.exec()' austauschbar, so dass Sie beliebig verwenden können. Wenn Sie möchten, dass Ihr Code auch auf PyQt4 läuft, dann bleiben Sie bei 'app.exec _()'. Also, die Quintessenz ist: Damit Ihr Code richtig auf PyQt5 ** und ** PyQt4 funktioniert, verwenden Sie 'sys.exit (app.exec _())'. –
@ Boštjan Mejak .. hoora für Ihren Kommentar und Erklärung! Mehr upvotes benötigt sicher! Der erste Kommentar, den ich bisher gefunden habe, erklärt diese kleinen Unterschiede, die ich im Code bemerkt habe. Der Wechsel von pyqt4 zu pyqt5 ist wie das Lernen, wieder zu lesen (muss zugeben ... 10 Jahre nicht programmieren macht einen ein bisschen rostig ... und Python knallt auch ein paar Funbälle unter die Haube). – ZF007
@ BoštjanMejak: Sie brauchen 'sys.exit()' sonst führt 'app.exit (1)' Aufruf nicht zum entsprechenden Exit-Status, dh, verwenden Sie selbst bei Python 3 und PyQt5 'sys.exit (app. exec()) '. – jfs