68 votes

PyQt ou PySide - lequel utiliser

J'ai commencé à apprendre un peu de python et je voudrais maintenant à jouer un peu avec l'interface du bâtiment. Qt semble être un bon choix en raison de sa croix-platformishness.
Maintenant, il semble y avoir deux fixations disponibles: PyQt par les Berges de l'Informatique et PySide, à l'origine développé par Nokia.
Alors, qui dois-je choisir? Tout ce que je peux trouver sont de deux ans de fonctionnalités de comparaisons, mais quelles sont les différences de nos jours?
Lequel est le plus facile à utiliser, a plus/mieux documentation? Deux sont encore en développement?
De licence n'est pas de peu d'intérêt pour moi puisque je n'ai pas l'intention d'écrire des applications commerciales.

33voto

lunaryorn Points 13621

Les deux kits sont activement maintenu, et, aujourd'hui, plus ou moins égaux en fonctionnalités et de qualité. Il y a seulement quelques, plutôt sans importance différences.

Encore, je vous recommande de PySide pour Python 2. Il est plus raisonnable de l'API, principalement, il n'expose pas de Qt types, qui ont un équivalent en Python (par exemple, QString, QList, etc.) ou qui sont totalement superflues en raison de Python dynamique de la nature, comme QVariant. Cela évite de nombreux fastidieux conversions vers et à partir de Qt types, et donc facilite la programmation et évite de nombreuses erreurs.

PyQt prend également en charge moderne de l'API, et utilise par défaut pour Python 3, mais pas pour Python 2 afin d'assurer la rétrocompatibilité.

25voto

Gerald Points 349

Il y a aussi la licence de la différence. PySide est LGPL alors que PyQt est GPL. Cela pourrait faire une différence si vous ne souhaitez pas réaliser votre projet opensource. Bien que PyQt a toujours le bien-fondé de la version disponible pour une assez prix raisonnable.

J'ai tendance à trouver le PySide documentation plus intuitive. L'API, à mon avis, est un peu plus Pythonic et le taux de corrections de bug est assez impressionnant en ce moment.

PyQt a l'avantage de Python 3 soutien et de la titularisation. Il y a beaucoup plus 3e partie de la documentation/tutoriels pour elle.

17voto

Simon Hibbs Points 1827

J'ai récemment porté à une importante base de code (plus de 8 000 lignes de code) à partir de PyQt pour PySide.

Droit maintenant, je dirais que PyQt est un beaucoup plus mature, complet, performant et stable projet. J'ai frappé un certain nombre de bugs dans PySide, et que vous pensez que tout grand projet va frapper questions. Cela dit, j'ai signalé un bug pour le projet et il a été fixé et dans une nouvelle version dans un délai de quelques semaines. Je suis également d'avoir un problème où l'application prend environ 15 secondes pour arrêter de fumer. Je n'ai pas encore passé le temps de trouver pourquoi. Cependant, c'est seulement une question de temps avant qu'il n'y aura pas de raisons de choisir PyQt plus de PySide.

Si vous décidez d'aller avec PyQt pour l'instant, assurez-vous d'utiliser l'API v2 tout au long de. C'est une meilleure API, et faciliter à l'avenir toute transition de PySide. Aussi, si vous ne port, il suffit de suivre les lignes directrices sur la PySide wiki. Même pour un 8+ kloc application composée d'environ 20 fichiers source, il a juste pris un après-midi.

10voto

Chris Morgan Points 22285

Un fait important est que PyQt4 a deux versions de son Api pour certaines choses. Version 1 éléments sont des choses telles que l'utilisation d' QString au lieu de unicode, et QVariant (fondamentalement juste un wrapper, je crois - je n'ai jamais réellement fait quelque chose qui l'utilise) au lieu de la enveloppé. La Version 2, qui peut être activée en Python 2 et est activé en Python 3, c'est nettement mieux (bien que toujours unpythonic dans de nombreux endroits - PySide est de trop, mais ça va nettement mieux. Il y a encore quelques incompatibilités avec eux; PyQt4 a QtCore.pyqt(Signal|Slot|Property), PySide a QtCore.(Signal|Slot|Property).

Pour un projet de mon propre chef, j'ai décidé que je voulais le soutenir à la fois avec pas de modifications dans le code. Je préfère PySide, mais sous Windows je distribuer avec PyQt4 comme à l'heure actuelle c'est un peu petit pour la distribution à l'heure actuelle. Ma solution est de vérifier pour PySide et si il y insérez une importation crochet pour rediriger PyQt4 importations de PySide, ou si elle n'est pas de corriger les PyQt4 fonctionner comme il se doit.

Les fichiers utilisés:

  • pyqt4pysideimporter.py
  • zip_imp.py (pour py2exe de soutien)
  • make_gui.py (mon script pour le bâtiment .l'interface utilisateur des fichiers et des .qrc fichiers avec pyside ou pyqt4 outils, et fixant les importations d'être uniformes; les sondages pour les modifications de fichiers et reconstruit le changé - rien de high-tech comme inotify)

Alors que vous venez import pyqt4pysideimporter et pyqt4pysideimporter.autoselect() (comme en main.py dans ce référentiel). Et après, vous pouvez simplement import PyQt4.

De côté: il a également été indiqué il y a quelques jours sur le PySide liste de diffusion qu'ils sont la planification sur le soutien de Python 3, dans les prochains mois.

10voto

jichi Points 561

Bien qu'ils pourraient en avoir l'interface en Qt/C++ classes, leur interface pour Qt/C++ macros tels que le rapport signal/slot/propriété sont très différentes. Le portage de l'un à l'autre n'est pas une tâche facile. Il serait mieux de prendre la bonne décision au tout début.

Au-delà de la grammaire/licence différences, je veux juste souligner un défaut de PyQt dans la langue de liaison, qui pourrait être essentielle à écrire QML projet en Python. Ces différences finfally me pousser à PySide de PyQt.

  • qmlRegisterType

    qmlRegisterType est essentielle pour créer le runtime C++ liaison avec QML. Dans PySide, il fait partie de PySide.QtDeclarative. Et cela fonctionne assez bien avec Python.

    En PyQt, qmlRegisterType n'existe pas. Et je ne pouvais pas trouver une autre approche. Je sais que certains tâche simple qui pourrait être fait par la mise en QML contexte. Mais si vous avez vraiment besoin exécution de liaison avec qmlRegister et Q_INVOKABLE, je pense que PySide est le seul choix pour le moment.

  • Shiboken VS SIP

    Les deux peuvent s'enrouler Qt/C++ dans plugin python. Pour Shiboken, je pense qu'il est plus simple et nécessite moins de codage. Il suffit de créer un typesystem xml, y compris le NOM des classes que vous souhaitez exporter, et c'est tout. Shiboken ne nécessite pas supplémentaires manuel pour la structure de la cible classes.

    Pour SIP, il aurait besoin de plus de codage supplémentaire. Nous allons créer un fichier SIP que presque reimplements tout l'en-tête C++. Elle exige non seulement le NOM de la classe, mais aussi les DÉTAILS de ce que les méthodes de la classes de cibles ont. Si la classe C++ est de bonne conception, à l'aide de Pimp et nous voulons exporter toutes les méthodes de l'intérieur, SIP devrait fournir un moyen d'exporter automatiquement toutes les méthodes de la classe, qu'il ne peut pas pour le moment. Cela permettrait également d'ajouter le fardeau du maintien de la cohérence entre le SIP et le C++ en-têtes.

    Mais je dois dire que la documentation de Shiboken sur l'intervalle Qt wiki est très mauvais et trompeuse. La création de plugin Python avec Shiboken sur Windows ne nécessitent pas nécessairement de CMake à tous. generatorrunner est pas requis. Je n'utilise que windows cmd script pour invoquer shiboken, et un qmake pro pour la compilation de la cible plugin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X