web-dev-qa-db-fra.com

Dois-je utiliser `app.exec ()` ou `app.exec _ ()` dans mon application PyQt?

J'utilise Python 3 et PyQt5. Voici mon programme de test PyQt5, concentrez-vous sur les 2 dernières lignes:

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_())

Je sais que exec est un mot-clé de langue en Python. Mais codez sur Documentation PyQt5 officielle (en particulier la partie Destruction d'objet à la sortie ). Je vois que cet exemple montre l'utilisation de app.exec() ce qui me confond.

Quand je l'ai testé sur ma machine. J'ai trouvé qu'il n'y avait aucune différence visible de ma part. Avec et sans _ Produit la même sortie sans différence de temps.

Ma question est:

  • Y a-t-il quelque chose qui ne va pas lorsque j'utilise app.exec()? comme un conflit avec le exec interne de Python? Je soupçonne que les deux exec exécutent quelque chose.
  • Sinon, puis-je utiliser les deux de façon interchangeable?
35
socket

C'est parce que jusqu'à Python 3, execétait un mot-clé réservé , les développeurs PyQt y ont donc ajouté un trait de soulignement. From Python à partir de 3, exec est n'est plus un mot-clé réservé (car il s'agit d'une fonction intégrée; même situation que print), donc cela avait du sens dans PyQt5 pour fournir une version sans trait de soulignement pour être cohérente avec les documents C++, mais conserver une version avec trait de soulignement pour la compatibilité descendante. Donc pour PyQt5 avec Python 3, les deux fonctions exec sont Pour PyQt plus ancien, seule exec_() est disponible.

61
Oliver

Sur la question de savoir s'il faut préférer l'un à l'autre: utiliser exec_ signifie que vous avez une chose de moins à vous soucier si vous décidez d'ajouter la prise en charge de PyQt4 et/ou Python> = 2.6, et que vous souhaitez conserver une base de code unique.

7
ekhumoro