Vue d'ensemble

PyQt6 6.0, publié le 6 janvier 2021, est le binding Python pour Qt 6. Cette version majeure apporte des changements dans la gestion des énumérations et l'alignement avec la nouvelle architecture de Qt 6.

Fonctionnalités principales

Passage à Qt 6

PyQt6 s'appuie sur Qt 6 qui modernise le rendu graphique, supprime les modules obsolètes et améliore les performances. Les applications bénéficient du nouveau pipeline de rendu basé sur RHI (Rendering Hardware Interface).

python
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel
from PyQt6.QtCore import Qt

app = QApplication(sys.argv)

fenetre = QMainWindow()
fenetre.setWindowTitle('PyQt6 - Hello')
fenetre.setGeometry(100, 100, 400, 200)

label = QLabel('Bienvenue dans PyQt6 !', fenetre)
label.setAlignment(Qt.AlignmentFlag.AlignCenter)
fenetre.setCentralWidget(label)

fenetre.show()
sys.exit(app.exec())

Changements des énumérations

Les énumérations Qt doivent désormais être référencées avec leur nom complet (scoped enums). Par exemple, Qt.AlignCenter devient Qt.AlignmentFlag.AlignCenter. Ce changement améliore la clarté du code mais nécessite une migration.

python
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QSizePolicy

# PyQt5 : Qt.AlignCenter (non scopé)
# PyQt6 : Qt.AlignmentFlag.AlignCenter (scopé)

# Exemples de migration des enums
alignment = Qt.AlignmentFlag.AlignCenter
orientation = Qt.Orientation.Horizontal
key = Qt.Key.Key_Return

# Combinaison de flags avec l'opérateur |
align = (Qt.AlignmentFlag.AlignHCenter
         | Qt.AlignmentFlag.AlignTop)

# SizePolicy également scopé
policy = QSizePolicy(
    QSizePolicy.Policy.Expanding,
    QSizePolicy.Policy.Fixed
)

Sources