Ik gebruik Python 3 en PyQt5. Hier is mijn PyQt5-testprogramma, focus op de laatste 2 regels:
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_())
Ik weet dat exec
een taalsleutelwoord is in Python. Maar code op Officiële PyQt5-documentatie(met name het gedeelte Objectvernietiging bij vertrek). Ik zie dat het voorbeeld het gebruik van app.exec()
laat zien, wat me in de war brengt.
Toen ik het op mijn computer testte. Ik ontdekte dat er geen zichtbaar verschil is van mijn kant. Zowel met als zonder _
produceert dezelfde output in een mum van tijdsverschil.
Mijn vraag is:
- Gaat er iets mis als ik
app.exec()
gebruik? zoals botsen met Python’s interneexec
? Ik vermoed omdat beideexec
‘s iets uitvoeren. - Zo niet, kan ik beide dan door elkaar gebruiken?
Antwoord 1, autoriteit 100%
Dat komt omdat tot Python 3, exec
een gereserveerd sleutelwoord was, dus de PyQt-ontwikkelaars hebben er een onderstrepingsteken aan toegevoegd. Vanaf Python 3 is exec
niet langer een gereserveerd sleutelwoord( omdat het een ingebouwde functie is; dezelfde situatie als print
), dus was het logisch om in PyQt5 een versie zonder onderstrepingsteken te bieden om consistent te zijn met C++-documenten, maar een versie met onderstrepingsteken te behouden voor achterwaartse compatibiliteit. Dus voor PyQt5 met Python 3 zijn de twee exec
-functies hetzelfde. Voor oudere PyQt is alleen exec_()
beschikbaar.
Antwoord 2, autoriteit 8%
Over de vraag of u de een boven de ander verkiest: het gebruik van exec_
betekent dat u zich één ding minder zorgen hoeft te maken als u ooit besluit ondersteuning toe te voegen voor PyQt4 en/of Python >= 2.6 , en wil een enkele code-base behouden.
Antwoord 3
Vanaf PyQt 6 wordt app.exec_()
niet langer ondersteund, alleen app.exec()
wel.
Daarom gebruik ik bij het bouwen van nieuwe apps alleen de laatste.
https://www.riverbankcomputing.com/static /Docs/PyQt6/pyqt5_differences.html?highlight=pyqt5