2012-06-15 41 views
11

Tengo una aplicación cuya GUI debe rehacerse por motivos ergonómicos. Fue escrito en PyGTK y me pregunto si debería cambiar a PyQt para facilitar desarrollos futuros o no.¿Cuáles son las ventajas de PyQt sobre PyGTK y viceversa?

Esta aplicación tiene una interfaz de usuario principalmente clásica con botones, barras de herramientas, cuadros de diálogo, etc. pero también tiene algunos requisitos específicos: ciertamente necesitaré crear un widget personalizado basado en treeview/tableview (para hacer un widget de hoja de cálculo) y esta aplicación tiene muchos hilos de trabajo que actualizan la GUI.

estoy buscando asesoramiento en estos dos puntos:

  • En cuanto a los widgets personalizados de creación, qué PyQt proporcionar mejores mecanismos de PyGTK, especialmente a modificar ligeramente los widgets existentes.
  • Tuve problemas con (incluso cuando utilizaba correctamente threads_init() y threads_enter()) la actualización de la GUI por subprocesos de trabajo mientras usaba PyGTK. ¿PyQt es mejor en ese punto?
+2

Bueno, para empezar, PyGTK ya no se desarrolla activamente. [PyGObject] (https://live.gnome.org/PyGObject) es aparentemente la manera de hacer las cosas ahora. –

+0

Una actualización de un hilo de trabajo funciona siempre con 'gobject.idle_add'. 'threads_init' no es compatible con Windows. ¿Este podría ser el problema? – schlamar

Respuesta

0

No puedo comparar, porque no uso GTK, pero sugeriría Qt.

Qt definitivamente tiene "treeview/tableview" de lo que estás hablando y puedes hacer que las "células" sean tus widgets personalizados (estoy estudiando este tema en este momento). Qt se creó pensando mucho en los hilos, por lo que los hilos de trabajo pueden usar el mecanismo de señal/ranura con facilidad. Y sí, puede modificar los widgets existentes aplicando hojas de estilo o subclases.

Ahora, sobre PyQt, no lo recomendaría debido a problemas de licencia. PySide parece una mejor Qt → Python vinculante para mí: se puede utilizar libremente en aplicaciones comerciales y tiene algunas pequeñas ventajas en la API (pero, de lo contrario, es totalmente compatible con PyQt).

Qt es multiplataforma y la implementación de aplicaciones PySide es muy fácil con cx_Freeze; los usuarios de su aplicación no tendrán que instalar nada en absoluto.

+2

Para ser contrario, recomendaré PyQt sobre Pyside porque Pyside es un proyecto nuevo y aún tiende a ser un poco más problemático en mi experiencia. Sin embargo, las API para las dos bibliotecas son casi idénticas, por lo que no debería ser demasiado esfuerzo cambiar entre ellas si cambia de opinión. – Luke

+1

@Luke Siempre intento 'importar PySide' primero y en' ImportError' 'importar PyQt4' (no estoy seguro de cuáles serán las consecuencias de la licencia), y hacer que mis aplicaciones funcionen con Python 3 y Python 2, todas con una base de código. –

+1

También recomendaría PyQt sobre PySide si no necesita LGPL. PyQt es un proyecto mucho más maduro y tiene un mantenedor altamente competitivo y proactivo. También he descubierto que PySide tiene muchas más fallas, aunque admitiré que no lo he usado mucho recientemente, por lo que las cosas pueden haber cambiado en ese sentido. – ekhumoro

0

También tienen ninguna experiencia con GTK, pero puede ofrecer algunas respuestas, sin embargo:

  • Qt se ha diseñado desde cero para ser orientado a objetos; casi todo lo que tiene tiene un excelente soporte para subclases. PyQt del mismo modo.

  • Qt explícitamente NO admite la modificación de la GUI por ningún hilo que no sea el hilo principal de la GUI. Es probable que cause caídas de esta manera. Sin embargo, como mencionó BlaXpirit, hay una variedad de mecanismos de comunicación entre hilos muy sencillos, como el paso de señales.

0

Definitivamente PyQt ... Hay una gran cantidad de aplicaciones avanzadas de usarlo ... En lo personal, estoy usando KDE, por lo que, incluso interfaz gráfica de usuario de mi sistema utiliza Qt! También estoy creando una aplicación de hoja de cálculo y me parece que es mucho más fácil que lo que pensé al principio ... Pero, BiaXpirit también tiene razón: excepto si estás desarrollando una aplicación de código abierto, tal vez deberías usar PySide o algo else ...

0

Nunca utilicé PyGTK pero creo que las dos características de Qt que son excepcionalmente buenas son: model/view programación y signal/slots. Si necesitas ese tipo de cosas, diría que vale la pena, al menos, leer los documentos sobre ellos y comparar los dos kits de herramientas con ese respeto.

El diseñador también ahorra tiempo. El promotion feature --- puedes personalizar tus widgets en el diseñador reemplazándolo visualmente con algo similar, por ejemplo, has implementado una vista de árbol personalizada con tus funciones --- es muy conveniente. Puede usar el diseñador para mostrar una vista de árbol normal, pero cuando lo exporta utiliza su clase personalizada.

Las docs son excelentes.

Editar: Puede usar Qt documentos directamente. He estado programando en Python usando PySide y solo hay unas pocas instancias en las que realmente necesitaba documentación específica. Aunque es exists.

2

Me gusta mejor GTK +, ya que (al menos para mí) se ve mejor. PyQt y variantes (por ejemplo, PySide), sin embargo, tienen un conjunto de extras inmensamente grande, que incluye un motor WebKit, un analizador XML, soporte SQL y más.

Si solo quieres apariencia, diría GTK +/PyGObject. Si está planeando usar cualquier cosa que PyQt tenga, use PyQt.

Como nota al margen, si se queda con GTK +, le aconsejo que actualice a PyGObject y GTK + 3.0, ya que PyGtk + ya no se mantiene.

Cuestiones relacionadas