Tanto o PyQt4 quanto o PySide têm mapeamentos muito semelhantes aos da API Qt. Existem, no entanto, algumas diferenças, minhas opiniões sobre as quais estão descritas abaixo:
Manutenção
Ambos são bem cuidados. O PySide produz muito mais lançamentos regulares no momento: acho que está mais intimamente ligado ao Qt do que ao PyQt4 e, como um projeto mais novo, tem uma comunidade mais ativa no momento. No entanto, essa é apenas a minha impressão e pode estar errada.
O PyQt4 tem a opção de suporte comercial disponível (não sei se isso é verdade para o PySide ou não).
Licença
PyQt4 é liberado sob uma licença comercial ou a GPL ; PySide é lançado sob a LGPL . Para aplicações comerciais, essa é uma diferença significativa.
APIs e versões em Python
O PyQt4 suporta duas APIs diferentes. A versão 1 da API é o padrão para aplicativos python 2.x e a versão 2 da API é o padrão para aplicativos python 3.x.
O PySide suporta apenas uma API, que é aproximadamente equivalente à versão 2. da API do PyQt4. A versão 2 da API (ou a API PySide) é muito mais agradável de trabalhar do que a versão 1. da API do PyQt4. cordas para se QtCore.QString
voltar novamente. Na versão 2 da API (e no PySide), você apenas usa seqüências de caracteres python. Veja abaixo uma maneira simples de alternar entre PyQt4 e PySide, se você quiser jogar com os dois.
A maioria dos códigos que escrevo parece funcionar igualmente bem no PyQt4 e no PySide. Historicamente, eu sempre usei o PyQt4 para GUIs de python, mas a maioria das novidades que escrevo agora usa o PySide (principalmente devido ao licenciamento mais flexível). Eu certamente recomendo que você experimente os dois e veja como os encontra. Se você usa QtVariant.py (abaixo), a alternância entre eles é trivial e quando você toma uma decisão, haverá apenas um arquivo que precisa ser atualizado.
Documentação
A documentação para o PyQt4 e o PySide é gerada automaticamente a partir da documentação principal do Qt . Na minha opinião, a documentação do PySide é uma melhor representação do que você realmente usa, mas, na prática, costumo usar a documentação do Qt de qualquer maneira (é muito fácil traduzir mentalmente a documentação do C ++ para python).
Bibliotecas externas
Se você estiver usando bibliotecas externas, algumas ainda não funcionam com o PySide. Não há muitos que você precise trabalhar com o PySide para ser sincero, mas há alguns anos atrás escrevi um código que usava twisted (com o reator Qt) e matplotlib, o que me obrigou a usar o PyQt4 em vez do PySide . Eu acho que é bem provável que essas bibliotecas já tenham sido atualizadas para suportar as duas, mas eu não verifiquei.
Fazendo o código funcionar com PyQt4 ou PySide
Supondo que você esteja usando o python 2.x, você pode facilmente tornar seu código compatível com o PySide e o PyQt4 criando um QtVariant.py e usando:
from QtVariant import QtGui, QtCore
como queiras. O QtVariant.py que eu uso fica assim:
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]