Sollte ich `app.exec () "oder" app.exec_()` in meinem PyQt-Anwendung?
Ich benutze Python 3 und PyQt5. Hier ist meine test-PyQt5-Programm, konzentrieren sich auf die letzten 2 Zeilen:
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
ist eine Sprache Schlüsselwort in Python. Aber code auf Offizielle Dokumentation PyQt5 (speziell die Objekt der Zerstörung an der Ausfahrt Teil). Ich sehe das Beispiel zeigt die Verwendung von app.exec()
was mich verwirrt.
Wenn ich es getestet auf meinem Rechner. Ich fand, dass es keinen sichtbaren Unterschied zu meinem Ende. Sowohl mit als auch ohne _
produziert die gleiche Ausgabe in kürzester Zeit Unterschied.
Meine Frage ist:
- Ist dort etwas falsch geht, wenn ich
app.exec()
? wie eine Kollision mit Python internenexec
? Ich vermute, weil beideexec
's sind in der Ausführung etwas. - Wenn nicht, kann ich beide abwechselnd?
- In PyQt5, brauchen Sie nicht
sys.exit()
überhaupt.app.exec_()
oderapp.exec()
allein ist genug, und es funktioniert normal. Sie wurden einige Dinge in PyQt5 unter der Haube, so dass Sie nicht brauchen, diesys.exit()
mehr. Wenn Sie möchten, dass Ihr code ausgeführt werden, der auf PyQt4, dann habensys.exit()
es. Auchapp.exec_()
undapp.exec()
sind austauschbar, so können Sie je nachdem, was Sie möchten. Wenn Sie möchten, dass Ihr code ausgeführt werden, der auf PyQt4, dann stick mitapp.exec_()
. Also die Quintessenz ist: damit Ihr code richtig funktioniert PyQt5 und PyQt4, verwenden Siesys.exit(app.exec_())
. - Boštjan Mejak.. hoora für deinen Kommentar und explenation! Mehr upvotes benötigt sicher!!! Erster Kommentar, so weit ich gefunden habe, erklärt, dass diese geringen Unterschiede, die ich bemerkt in den code. Der Wechsel von pyqt4 zu pyqt5 ist wie das lernen wieder zu Lesen (muss zugeben.. 10 Jahre nicht Programmieren lässt einen ein wenig eingerostet.. und python knallen ein paar funballs unter der Haube zu).
- Sie brauchen
sys.exit()
sonstapp.exit(1)
Anruf nicht führen zu den jeweiligen exit-status, d.h. auch auf Python 3 und PyQt5, verwenden Siesys.exit(app.exec())
. - In PyQt5, die Sie gelöst haben, die Reihenfolge, in der die Qt und Python stoppen Ihre Prozess-und deshalb werden wir nun wirklich nicht brauchen, um verwenden Sie die sys.exit () - Aufruf mehr. Es ist alles erklärt, in der PyQt5 Dokumentation.
- falsch. Hier ist ein minimale code-Beispiel. btw, benutze \@ syntax wenn Sie möchten, dass ich benachrichtigt werden über Ihre Kommentare.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil bis Python 3,
exec
war ein reserviertes Schlüsselwort, so dass die PyQt-Entwickler Hinzugefügt Unterstrich es. Von Python 3 weiterexec
ist nicht länger ein reserviertes Schlüsselwort (weil es eine builtin-Funktion; gleichen situation wieprint
), so dass es Sinn machte PyQt5 um eine version ohne Unterstrich im Einklang mit C++ docs, aber halten Sie eine version mit Unterstrich für rückwärts Kompatibilität. Also für PyQt5 mit Python 3, die zweiexec
Funktionen sind die gleichen. Für die älteren PyQt, nurexec_()
verfügbar ist.Auf die Frage, ob Sie lieber einen über den anderen: mit
exec_
heißt, Sie haben eine Sache weniger sorgen zu machen, wenn Sie jemals entscheiden, um Unterstützung für PyQt4 und/oder Python >= 2.6 und pflegen möchten, eine einzige code-Basis.exec_
funktioniert mit jeder version von python, die gleich oder größer als 2.6 in Kombination mit pyqt4 oder pyqt5. In früheren Versionen von python sind nicht unterstützt von pyqt. Soexec_
ist sowohl vorwärts und rückwärts kompatibel mit pyqt4 und pyqt5, und jede version von python >= 2.6 (ich bezweifle, ob python-3.0.x ist wirklich rentabel, obwohl).