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:
from QtVariant import QtGui, QtCore
ou peu importe. Le fichier QtVariant.py que j'utilise ressemble à ceci:
import sys
import os
default_variant = 'PySide'
env_api = os.environ.get('QT_API', 'pyqt')
if '--pyside' in sys.argv:
variant = 'PySide'
elif '--pyqt4' in sys.argv:
variant = 'PyQt4'
elif env_api == 'pyside':
variant = 'PySide'
elif env_api == 'pyqt':
variant = 'PyQt4'
else:
variant = default_variant
if variant == 'PySide':
from PySide import QtGui, QtCore
# This will be passed on to new versions of matplotlib
os.environ['QT_API'] = 'pyside'
def QtLoadUI(uifile):
from PySide import QtUiTools
loader = QtUiTools.QUiLoader()
uif = QtCore.QFile(uifile)
uif.open(QtCore.QFile.ReadOnly)
result = loader.load(uif)
uif.close()
return result
elif variant == 'PyQt4':
import sip
api2_classes = [
'QData', 'QDateTime', 'QString', 'QTextStream',
'QTime', 'QUrl', 'QVariant',
]
for cl in api2_classes:
sip.setapi(cl, 2)
from PyQt4 import QtGui, QtCore
QtCore.Signal = QtCore.pyqtSignal
QtCore.QString = str
os.environ['QT_API'] = 'pyqt'
def QtLoadUI(uifile):
from PyQt4 import uic
return uic.loadUi(uifile)
else:
raise ImportError("Python Variant not specified")
__all__ = [QtGui, QtCore, QtLoadUI, variant]