Récemment, j'ai participé à des conversations sur la création d'un modèle Quickly pour une application Qt et QtQuick Ubuntu. L'idée est de faciliter le développement d'applications Qt, du concept au package, comme c'est le cas actuellement avec GTK, sur lequel est basé le modèle d'application Ubuntu Quickly.
L'intention est toujours d'utiliser Python comme langage de programmation de base, et la première question qui me vient à l'esprit est la suivante: quelles liaisons Python devrions-nous utiliser PyQt ou PySide ?
J'aimerais que les spécialistes des deux technologies nous expliquent quels sont les avantages et les inconvénients de chacune, leur maintenance, leur correspondance entre l'API Qt et les liaisons, etc.
Merci!
Réponses:
PyQt4 et PySide ont des mappages très similaires à l'API Qt. Il existe cependant quelques différences, dont les opinions sont décrites ci-dessous:
Entretien
Ils sont tous deux bien entretenus. PySide produit beaucoup plus de versions régulières en ce moment: je pense que cela est plus étroitement lié à Qt qu'à PyQt4 et, en tant que nouveau projet, a une communauté plus active en ce moment. Cependant, ce n’est que mon impression et c’est peut-être faux.
PyQt4 a l'option de support commercial disponible (je ne sais pas si c'est vrai ou non pour PySide).
Licence
PyQt4 est publié sous une licence commerciale ou sous la licence GPL ; PySide est publié sous la LGPL . Pour les applications commerciales, il s'agit d'une différence significative.
API et versions Python
PyQt4 prend en charge deux API différentes. API version 1 est la valeur par défaut pour les applications python 2.x et API version 2 est la valeur par défaut pour les applications python 3.x.
PySide ne prend en charge qu'une seule API, ce qui est à peu près équivalent à l'API version 2 de PyQt4. L'API version 2 (ou l'API PySide) est beaucoup plus agréable à utiliser que l'API version 1 de PyQt4. Dans la version 1 de l'API, vous avez beaucoup de code python. cordes à
QtCore.QString
s et à nouveau. Dans la version 2 de l'API (et PySide), vous n'utilisez que des chaînes python. Voir ci-dessous un moyen simple de basculer entre PyQt4 et PySide si vous souhaitez jouer avec les deux.La plupart du code que j'écris semble fonctionner aussi bien avec PyQt4 que PySide. Historiquement, j’avais toujours utilisé PyQt4 pour les interfaces graphiques python, mais la plupart des nouveaux éléments que j’écris utilisent maintenant PySide (principalement en raison de l’octroi de licences plus souples). Je vous recommanderais certainement d'essayer les deux et de voir comment vous les trouverez. Si vous utilisez QtVariant.py (ci-dessous), basculer entre eux est simple et lorsque vous prenez une décision, un seul fichier doit être mis à jour.
Documentation
La documentation de PyQt4 et de PySide est générée automatiquement à partir de la documentation principale de Qt . À mon avis, la documentation PySide est une meilleure représentation de ce que vous utilisez réellement, mais en pratique, j'ai tendance à utiliser simplement la documentation Qt de toute façon (il est assez facile de traduire mentalement la documentation C ++ en python).
Bibliothèques externes
Si vous utilisez des bibliothèques externes, certains ne fonctionnent pas encore avec PySide. Pour être honnête, il n’ya pas grand-chose dont vous ayez besoin de travailler avec PySide, mais il ya quelques années, j’écrivais un code qui utilisait tordu (avec le réacteur Qt) et matplotlib et qui me contraignait à utiliser PyQt4 plutôt que PySide. . Je pense qu'il est fort probable que ces bibliothèques aient déjà été mises à jour pour prendre en charge les deux, mais je n'ai pas vérifié.
Faire fonctionner Code avec PyQt4 ou PySide
En supposant que vous utilisiez Python 2.x, vous pouvez assez facilement rendre votre code compatible avec PySide et PyQt4 en créant un fichier QtVariant.py et en utilisant:
ou peu importe. Le fichier QtVariant.py que j'utilise ressemble à ceci:
la source
return QtUiTools.QUiLoader().load(uifile)
prenant le chemin du fichier sans aucun de ces éléments chauds.