Moet ik `app.exec()` of `app.exec_()` gebruiken in mijn PyQt-toepassing?

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 execeen 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 interne exec? Ik vermoed omdat beide exec‘s iets uitvoeren.
  • Zo niet, kan ik beide dan door elkaar gebruiken?

Antwoord 1, autoriteit 100%

Dat komt omdat tot Python 3, execeen gereserveerd sleutelwoord was, dus de PyQt-ontwikkelaars hebben er een onderstrepingsteken aan toegevoegd. Vanaf Python 3 is execniet 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

Other episodes