En cette période de définition de Qt 6, il était étonnant de n'avoir pas encore eu de détails sur sa déclinaison Python. On parle bien ici de PySide, la couche d'accès sous licence LGPL (ou commerciale) dont le développement est pris en charge par la Qt Company, pas PyQt, son équivalent historique sous licence GPL (ou commerciale). À l'origine, la seule raison d'être de PySide était ce différend sur la licence. L'histoire de PySide n'a pas été un long fleuve tranquille : le projet avait été lancé par Nokia et a bien avancé du temps de Qt 4, puis n'a pas su faire la mise à jour vers Qt 5 (notamment suite à des problèmes de financement d'OpenBossa et au rachat de Qt par Digia…).
Après quelques années, des développeurs indépendants sont arrivés à faire fonctionner PySide, mais sans support ni infrastructure pérenne. La Qt Company a finalement décidé de reprendre le projet sous son aile pour en assurer le développement. Depuis lors, les versions de PySide s'enchaînent et suivent de très près les versions de Qt : avec Qt 6, la synchronisation devrait être parfaite, l'édition Python devant être développée en parallèle avec l'API C++ et Qt Quick.
Vers quoi Qt pour Python devrait-il évoluer ? La compatibilité avec PyQt a été un point majeur pour en faciliter l'adoption, à quelques éléments mineurs près : PyQt 4 exposait QVariant explicitement (ce qui ne correspond pas du tout aux habitudes en Python), PyQt 5 l'a relégué en second plan, PySide l'a complètement éliminé (PySide effectue les traductions nécessaires entre les objets Python et les instances de QVariant). PySide a un public double : d'un côté, ceux qui viennent du C++ et apprécient la facilité de Python pour prototyper des applications fonctionnelles ou embarquer des extensions créées par l'utilisateur (comme Maya) ; de l'autre, les développeurs Python, qui apprécient disposer d'un environnement moderne et robuste de développement d'interfaces graphiques (Python fournissant la plupart des fonctionnalités de Qt). PySide utilise notamment la bibliothèque Shiboken pour créer des modules Python faisant appel à des fonctions C++, elle est utilisée par des projets complètement extérieurs à Qt.
Avec Qt 6, on ne parlera pas de PySide 3, comme on pourrait s'y attendre : le nom suivra les versions de Qt, on parlera donc de PySide 6. Python 2 disparaîtra complètement des plateformes gérées : cette version ne disposera plus d'aucun support dans un peu plus de quatre mois, cela n'a plus de sens de continuer à s'en occuper. Shiboken continuera à être développé, à gagner en maturité (notamment pour la gestion des pointeurs intelligents) et en facilité d'utilisation pour des projets extérieurs à Qt : les deux points principaux identifiés pour le moment sont la complexité de créer un projet de zéro (il faut un énorme CMakeLists pour un projet basique) et le besoin de recompiler shiboken_generator.
PySide expose une API très proche de Qt en C++. Cela facilite le passage d'un langage à un autre, mais déroute ceux qui n'utilisent que Python et pas C++. Par exemple, les noms de méthode suivent les conventions de Qt, pas celles de Python ; pour démarrer une application, il faut utiliser la méthode exec_, à rapprocher de exec en C++, mais exec est une fonction de base de Python qui ne peut pas être redéfinie (les développeurs pensent plutôt utiliser execute). De plus, on pourrait voir les annotations de type (PEP 484) arriver dans PySide, pour faciliter l'analyse des types (par exemple, par les environnements de développement). Les propriétés de Python ne se marient pas très bien avec celles de Qt : au lieu d'utiliser des propriétés, avec PySide, on doit utiliser des méthodes, ce qui complexifie légèrement le code à écrire (label.setAlignment(…) au lieu de label.alignment = …). Aussi, l'installation de PySide prend du temps, puisque tous les modules sont installés d'un coup : plusieurs paquets pip devraient être mis à disposition avec PySide 6, le niveau de granularité n'étant pas encore défini. Ceci pourrait devenir utile pour déployer des applications PySide sur des périphériques embarqués, comme sur un Raspberry Pi.
Au niveau des outils, pour le moment, PySide, tout comme PyQt, ne permet pas d'utiliser directement rcc ou uic (pour la précompilation des fichiers de traduction ou d'interface) : il faut utiliser pyside2-rcc et pyside2-uic pour générer des fichiers que PySide peut utiliser. Tant rcc que uic sont en train d'être améliorés pour qu'il n'y ait plus besoin de versions particulières pour Python. Ce travail devrait déjà être disponible pour Qt 5.14, prévu en novembre de cette année.
Côté Qt Quick, l'API Python souffre de quelques défauts, principalement dus à des limitations des API privées, comme l'impossibilité d'enregistrer des types non instanciables ou la limite à cinquante types qu'on peut exporter depuis un module Qt Quick. Ces limites devraient être levées pour PySide 6.
Du côté des nouvelles fonctionnalités, PySide 6 devrait faciliter le développement très rapide d'interfaces, avec des widgets de très haut niveau et prêts pour l'utilisation, sans devoir écrire des lignes et des lignes de code (comme dans le module Qt Chart, avec l'objet Series et le remplissage de vues). Ces widgets devraient s'intégrer avec les modules Python existants, comme Pandas ou NumPy. C'est probablement l'aspect le plus révolutionnaire prévu pour PySide 6 : PySide ne se limiterait plus à donner accès à Qt depuis Python, mais s'intégrerait vraiment dans l'écosystème Python.
Source : Technical vision for Qt for Python.
PySide continuera son évolution avec Qt 6
Avec une API plus proche des normes de Python et une meilleure intégration à l'écosystème Python
PySide continuera son évolution avec Qt 6
Avec une API plus proche des normes de Python et une meilleure intégration à l'écosystème Python
Le , par dourouc05
Une erreur dans cette actualité ? Signalez-nous-la !