1. Livres & vidéos
  2. Framework PyQt
  3. De Qt à PyQt
Extrait - Framework PyQt Développez vos interfaces graphiques en Python avec PyQt6
Extraits du livre
Framework PyQt Développez vos interfaces graphiques en Python avec PyQt6
3 avis
Revenir à la page d'achat du livre

De Qt à PyQt

À l’origine, le framework Qt

1. Contexte historique

Dans les années 1990, Haavard Nord et Eirik Chambe-Eng, deux ingénieurs norvégiens, fondent l’entreprise Trolltech, à l’origine du framework Qt. À cette époque, le développement de logiciels multiplateformes était un défi majeur pour les développeurs. Les applications devaient souvent être réécrites pour chaque système d’exploitation cible, ce qui augmentait considérablement les coûts et les délais de développement. Qt est donc né de la volonté de répondre à ce besoin en fournissant une solution efficace et élégante pour le développement d’interfaces graphiques et d’applications multiplateformes.

2. Qt comme réponse

Qt a été conçu pour offrir une bibliothèque de développement C++ permettant de créer des interfaces graphiques qui fonctionnent sur plusieurs systèmes d’exploitation sans modification du code source. Cela signifiait qu’un développeur pouvait écrire une application une seule fois et la déployer sur différents systèmes comme Windows, macOS et diverses distributions Linux, avec une apparence et un comportement natifs sur chaque plateforme.

3. Philosophie de Qt

Pour expliciter une « philosophie »...

Des éléments d’architecture de Qt

L’architecture de Qt est conçue pour être modulaire et flexible, permettant aux développeurs de créer des applications complexes avec une structure claire et organisée. Voici les principaux composants de l’architecture de Qt.

1. Modules principaux

Qt est composé de plusieurs modules, chacun dédié à des fonctionnalités spécifiques :

  • Qt Core : fournit les fonctionnalités de base comme la gestion des fichiers, le système de signal/slot pour la communication entre objets et les classes de base pour les conteneurs et les threads.

  • Qt GUI : gère tout ce qui concerne les interfaces graphiques, y compris les widgets, le dessin 2D et 3D et la gestion des événements graphiques.

  • Qt Widgets : contient les widgets classiques pour créer des interfaces utilisateur basées sur des fenêtres et des dialogues.

  • Qt Network : offre des classes pour gérer les communications réseau, y compris les sockets TCP/IP, les serveurs HTTP et les clients FTP.

  • Qt SQL : fournit des outils pour interagir avec des bases de données SQL, y compris les connecteurs pour plusieurs systèmes de gestion de bases de données. 

  • Qt Multimedia : gère les fonctionnalités multimédias comme l’audio, la vidéo et la gestion des appareils multimédias.

  • Qt Quick : utilisé...

Les interfaces de liaison : PyQt et le concept de binding de bibliothèques

1. Binding de bibliothèques

PyQt est un exemple de ce que l’on appelle un binding de bibliothèque. Ce type de liaison permet à un langage de programmation de profiter des fonctionnalités d’une bibliothèque native, initialement conçue dans un autre langage. Dans le cas de PyQt, la bibliothèque Qt, largement utilisée pour le développement d’interfaces graphiques, a été écrite en C++. PyQt agit comme un pont entre le langage Python et la bibliothèque Qt, rendant les fonctionnalités de Qt disponibles en Python sans que le développeur n’ait à écrire de code C++.

Ce concept d’interface de liaison est essentiel pour permettre une interopérabilité entre les langages et pour offrir aux développeurs des outils plus polyvalents sans réinventer la roue. Il permet de combiner la robustesse et la performance d’une bibliothèque native avec la facilité de développement et la simplicité syntaxique d’un langage de haut niveau.

2. Le cas de PyQt

Le fonctionnement d’un binding, comme PyQt, repose sur la capacité à exposer les classes, les méthodes et les propriétés de la bibliothèque d’origine dans le langage cible. Ce procédé permet...

De PyQt5 à PyQt6

1. Le contexte de cet ouvrage PyQt6

Le présent ouvrage à propos de PyQt6 est en quelque sorte la nouvelle édition d’un ouvrage précédemment publié aux Éditions ENI en janvier 2021 : PyQt5 - Développez vos interfaces graphiques en Python, ISBN : 978-2-409-02862-5. Il y a donc un enjeu à détailler les évolutions entre PyQt5 et PyQt6 et donc, comme nous l’avons vu précédemment, cela revient à détailler les évolutions entre Qt5 et Qt6.

2. PyQt6

a. La sortie de PyQt6

PyQt6 a été publié en décembre 2020, peu après la sortie officielle de Qt 6.0 par The Qt Company. La sortie de cette nouvelle version majeure de Qt a marqué une étape importante pour l’écosystème de développement d’applications graphiques, conduisant également à l’évolution du binding Python, PyQt, pour s’aligner sur ces mises à jour.

b. Pourquoi Qt6/PyQt6

L’objectif principal de PyQt6 est de fournir une interface Python complète et à jour pour Qt6, tout en adoptant les nouvelles fonctionnalités et améliorations de la bibliothèque Qt. PyQt6 propose des performances améliorées, une compatibilité accrue avec les dernières normes C++, ainsi que des mises à jour significatives de l’API pour offrir une expérience de développement moderne et plus efficace aux développeurs Python.

Le passage de PyQt5 à PyQt6 s’inscrit dans la continuité de l’évolution de Qt lui-même. La transition était nécessaire pour plusieurs raisons :

  • Modernisation de l’API Qt : Qt6 introduit des améliorations significatives en termes de performance...

De PyQt5 à PyQt6, une esquisse de méthodologie

En reprenant les éléments évoqués dans la section De PyQt5 à PyQt6, et si vous avez du code PyQt5 à migrer vers PyQt6, voici les quelques éléments auxquels veiller en priorité pour réussir à moindre coût un passage de PyQt5 à PyQt6. Pour chaque changement d’importance, un petit exemple du changement syntaxique est proposé. Il est recommandé de commencer par la migration des imports, puis celle des énumérations, ces deux aspects représentant probablement a minima 70 ou 75 % du travail global à réaliser.

1. Changements dans les imports

PyQt6 utilise une syntaxe d’importation explicite. Par exemple, les noms de modules doivent inclure explicitement leur chemin complet, en mentionnant explicitement PyQt6.

En PyQt5 :

from PyQt5.QtWidgets import QApplication, QMainWindow 

En PyQt6 :

from PyQt6.QtWidgets import QApplication, QMainWindow 

2. Changements dans les énumérations

Les énumérations (égales aux « Enums ») sont maintenant des membres de classe et non des attributs globaux. Cela signifie que les noms doivent être préfixés par leur classe parente.

En PyQt5 :

from PyQt5.QtCore import Qt   
alignment = Qt.AlignCenter 

En PyQt6 :

from PyQt6.QtCore import Qt  ...

Conclusion

Ce chapitre introductif avait comme double objectif de présenter PyQt vis-à-vis de Qt, mais également de mesurer ce qui sépare PyQt5 et PyQt6. Nous pouvons à présent rentrer dans le vif du sujet de PyQt, en procédant à l’inventaire des widgets PyQt qui est l’objet principal du chapitre suivant.