Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 de 6
https://humanos.uci.cu/2014/07/diferencias-entre-pyside-y-pyqt/
humanOS
Le ayudamos a descubrir Linux
Ubuntu, Nova y mucho ms...
Nova (/category/os/nova/)
Blender (/category/diseno/blender/)
Android (/category/android/)
Cmo se hace? (/category/tutorial/como-se-hace-tutorial/)
Tu escritorio (/category/tu-escritorio/)
FTP (http://store.uci.cu/humanos)
5 Comments
Hola a todos! Anteriormente les habl sobre como se realizaba la internacionalizacin de aplicaciones
PyQt/PySide (http://humanos.uci.cu/2014/07/internacionalizacion-de-aplicaciones-pyqtpyside/) (ambos bindings
(http://es.wikipedia.org/wiki/Binding) de la biblioteca (http://es.wikipedia.org/wiki/Biblioteca_%28programaci
%C3%B3n%29) grfica (http://es.wikipedia.org/wiki/GUI) Qt (http://es.wikipedia.org/wiki/Qt_%28biblioteca%29)
para el lenguaje de programacin (http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n) Python
(http://es.wikipedia.org/wiki/Python)) y aunque saba que ac en HumanOS nunca antes se haba hablado sobre
PySide (salvo algunos comentarios en algunas entradas). Intencionalmente no entr en detalles porque quera
guardar municiones para la entrada que hoy les traigo.
(http://humanos.uci.cu/wp-content/uploads/2014/07/pyside_vs_pyqt.png)
Un poco de historia
PyQt fue desarrollada por la firma britnica Riverbank Computing y est disponible para Windows
(http://es.wikipedia.org/wiki/Windows), GNU/Linux (http://es.wikipedia.org/wiki/GNU/Linux) y Mac OS X
16/5/2016 15:22
2 de 6
https://humanos.uci.cu/2014/07/diferencias-entre-pyside-y-pyqt/
(/)
En agosto de 2009, tras intentar negociar con Riverbank Computing la liberacin de PyQt bajo licencia LGPL
(http://es.wikipedia.org/wiki/LGPL) sin conseguirlo, Nokia, propietaria de Qt (http://es.wikipedia.org
/wiki/Qt_%28biblioteca%29), libera bajo esta licencia un binding similar, llamado PySide (http://es.wikipedia.org
/wiki/PySide). PySide soporta Linux (http://es.wikipedia.org/wiki/Linux)/X11 (http://es.wikipedia.org
/wiki/X_Window_System), Mac OS X (http://es.wikipedia.org/wiki/Mac_OS_X), MeeGo (http://es.wikipedia.org
/wiki/MeeGo), Windows (http://es.wikipedia.org/wiki/Windows) y Maemo (http://es.wikipedia.org/wiki/Maemo).
2. PySide solo soporta la API 2 de PyQt(PSEP 101). PyQt proporciona dos API distintas
(http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#selecting-incompatible-apis), la
primera de las cuales proporciona QStrings, QVariants, etc igual que en Python. La nueva API 2 proporciona
la conversin automtica entre las clases de Qt y tipos de datos nativos de Python y es de naturaleza
mucho ms Pythnica. La API por defecto de PyQt en Python 2.x es la API 1, mientras que en Python 3 es la
API 2. PySide slo es compatible con la API 2 de PyQt (ver PSEP 101 (http://www.pyside.org/docs/pseps
/psep-0101.html)) para ms detalles. Por lo tanto, las clases de Qt como QString, QStringList y QVariant no
estn disponibles en PySide. En lugar de ello, simplemente usa los tipos de datos nativos de Python. Si
ests portando el cdigo desde PyQt, es posible que desee modificar primero el cdigo PyQt para que utilice
la API 2 (utilizando una llamada a sip.setapi(clase, versin) antes de importar PyQt4), y slo despus de
conseguir que funcione el cambio, cambiar a PySide. Nota: Debido al cambio de la API,
QFileDialog.getOpenFileName devuelve una tupla en PySide, que a menudo es un problema al portar cdigo
de PyQt. Vase, por ejemplo error 343 (http://bugs.openbossa.org/show_bug.cgi?id=343).
3. Nuevo estilo de signals y slots usa una sitaxis ligeramente diferente(PSEP 100). PyQt lamentablemente
utiliza un esquema de nombres especfico para la implementacin de este nuevo estilo de signals y slots:
1
2
16/5/2016 15:22
3 de 6
https://humanos.uci.cu/2014/07/diferencias-entre-pyside-y-pyqt/
(/)
4. Declaracin de Propiedades de Qt se realiza utilizando una sintaxis ligeramente diferente (PSEP
103). Al igual que el cambio de signals y slots anterior, el declarado de las Qt Properties se realiza usando
QtCore.Property en lugar de QtCore.pyqtProperty(ver PSEP 103 (http://www.pyside.org/docs/pseps/psep0103.html)).
5. Diferentes nombres de las herramientas. PySide utiliza nombres diferentes para las herramientas:
pyuic4 -> pyside-uic
pyrcc4 -> pyside-rcc
pylupdate4 -> pyside-lupdate
6. Nombres de propiedades. PySide utiliza connect y event en el QObject. No utilices estos para nada en el
cdigo, y al mover el cdigo desde PyQt revisa que no exista para evitar conflictos.
7. QThreads. En PySide se debe llamar al mtodo .wait() de un hilo despus de llamar al mtodo .stop() si vas
a salir de la aplicacin. De lo contrario, es posible que lance una excepcin que diga: QThread: Hilo
destruido mientras sigue corriendo. Fallo de segmentacin.
class Window(QtGui.QWidget):
def __init__(self, parent=None):
super(QtGui.QWidget, self).__init__(parent)
en la que el constructor de la clase padre directa no se llama. PySide espera que hagas lo correcto:
1
2
3
class Window(QtGui.QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
4. Seales del viejo estilo necesitan el uso de los parntesis. PyQt permite el uso de seales de
cortocircuito sin parntesis, tales como:
1
self.emit(SIGNAL('text_changed_cb'), text)
16/5/2016 15:22
4 de 6
https://humanos.uci.cu/2014/07/diferencias-entre-pyside-y-pyqt/
(/)
1
self.emit(SIGNAL('text_changed_cb(QString)'), text)
La seal triggered() ser conectada al controlador del slot en lugar de la seal triggered(bool).
Adems, proporciona una funcin loadUi sustituta para la carga sencilla de archivos .ui que funcionan de la
misma forma con los dos bindings. Ver ejemplos de uso en rqt_gui (https://github.com/ros-visualization/rqt).
Conclusiones
A manera de conslusin PySide contiene muchsimas similitudes con PyQt, su estructura de llamadas, su
construccin de elementos, conectores, signals, slots, es prcticamente la misma idea en ambas. La diferencia
ms notoria se encuentra en el tipo de licencia que manejan.
La licencia LGPL (Licencia Pblica General Reducida GNU), creada por la Free Software Foundation (creadora
de la GPL en sus diversas versiones), con el fin de garantizar a los usuarios la libertad de uso y modificacin del
cdigo del software para ajustar a sus necesidades, permitiendo enlazarla a un programa no-GPL, que puede ser
Software Libre o Software privativo.
De esta manera, todo software escrito con PySide, puede ser utilizado e incrustado a software privativo sin
entrar en conflicto de licenciamiento, caso contrario utilizando PyQt y GPL, la cual se menciona que todo uso del
software no podr ser integrado a software privativo y toda mejora deber ser publicada para uso de la
16/5/2016 15:22
5 de 6
https://humanos.uci.cu/2014/07/diferencias-entre-pyside-y-pyqt/
(/)
Claro est que PyQt ofrece una licencia comercial tambin para casos en los que tengamos que desarrollar
aplicaciones con fines de lucro pero uno de los requisitos es utilizar software con soporte oficial de la empresa
que la provee (Riverbank). La informacin completa la puedes encontrar aqu
(http://www.riverbankcomputing.co.uk/commercial/pyqt). Hasta la prxima!
Fuentes: Qt-Project (http://qt-project.org/wiki/Differences_Between_PySide_and_PyQt) , Pythonzame
(http://pythoniza.me/conoce-pyside/) y AskUbuntu (http://askubuntu.com/questions/140740/should-i-use-pyqt-orpyside-for-a-new-qt-project).
5 Comments
raven (http://humanos.uci.cu) dijo:
Otra diferencia es la manera en la que estn hechos los bindings, mientras que PyQt est hecho con SWIG
PySide est hecho con Cython, que si no les dice nada se resume en que PySide es ms rpido en esta capa.
Positivo @raven tu como siempre, aportando. En efecto, cuando se quiere lograr un mejor rendimiento con
Python, sin lugar a dudas Cython es la mejor opcin. Muchos proyectos serios lo usan como lo son PySide y
Kivy, un framework para el desarrollo de aplicaciones multitouch (/2014/01/kivy-framework-para-el-desarrollode-aplicaciones-multi-touch/) desarrollado en Python, que utiliza Cython para mejorar el rendimiento en la parte
de los grficos.
Karel P. dijo:
Aunque Cython es una genialidad de lenguaje que te permite enlazar a C y Python de forma tan natural como el
mismo Python eso de que es mas rpido que SWIG hay que fundamentarlo bien. Eso depende de su uso, que
desde mi punto de vista no es exactamente el mismo. Es decir, Cython es ideal para aquellos Pythonistas con
conocimientos de C que prefieran utilizar Python para el desarrollo de sus productos. Pero el cdigo que genera,
por mucho que se cythonice, contiene todava objetos de la API de Python que tienen que ser procesados por
el recoletor de basura. Por otra parte las llamadas a funciones se hacen a travs de las misma API de Python y
eso hay que trabajarlo bien porque las llamadas no siempre son tan directas como lo hace una llamada en C. En
resumen, si sigo trabajando en Cython voy a poder optimizar de poquito en poquito el cdigo de Python,
arrastrando uno que otro cdigo Python con su velocidad de interprete (que en la prctica la verdad no es tan
notable pero a veces importa) lo que a un nivel muy personalizable. Aunque SWIG tambien padece de lo mismo
16/5/2016 15:22
6 de 6
https://humanos.uci.cu/2014/07/diferencias-entre-pyside-y-pyqt/
(/)
natural). As que si hago unas clases en C++ y me encargo de mi propia basura puedo hacer un binding de forma
ms rpida y con mayor rendimiento que con Cython. Pero lo repito, eso depende de la forma de desarrollar, ah
es donde se decide quien es ms rpido. Para mi los dos son geniales Disculpen si me he ido de tema
, al
@Karel P. Es verdad que con SWIG se hace un binding ms fcil que con Cytque hon de a mano, por eso para
PySide los de Nokia se inventaron shiboken, un programa que lee clases en c++ y escribe automticamente el
binding en Cython (est en el repo).
Karel P. dijo:
@raven Oooohhh, lo voy a cacharrear a ver, ya tengo el cdigo fuente si me convence pues adis SWIG para
siempre pues adoro el Cython jeje Thanks
16/5/2016 15:22