Claro o no claro: ¿Cuál es la mejor manera de usar PyGTK?


He estado aprendiendo python durante un tiempo con cierto éxito. Incluso logré crear uno o dos programas (simples) usando PyGTK + Glade.

La cosa es: No estoy seguro si la mejor manera de usar GTK con python es construyendo las interfaces usando Glade.

Me preguntaba si los más experimentados entre nosotros (recuerde, soy solo un principiante) podrían señalar los beneficios y advertencias de usar Glade en lugar de crear todo en el código en sí (suponiendo que el aprendizaje los enlaces gtk correctos no serían exactamente un problema).

Author: liberforce, 2008-09-07

11 answers

Yo diría que depende: si encuentra que usando Glade puede construir las aplicaciones que desea o necesita hacer, eso está absolutamente bien. Sin embargo, si realmente desea aprender cómo funciona GTK o tiene algunos requisitos de interfaz de usuario no estándar, tendrá para indagar en los internos de GTK (que no son tan complicados).

Personalmente, generalmente estoy a unos 5 minutos de un cliente rico cuando necesito alguna característica o personalización que es simplemente imposible a través de un diseñador como Glade o Stetic . Tal vez sea solo yo. Sin embargo, todavía es útil para mí para arrancar el diseño de ventanas utilizando una herramienta gráfica.

Mi recomendación: si hacer clientes ricos usando GTK va a ser una parte significativa de su trabajo/pasatiempo, entonces aprenda GTK también, ya que necesitará escribir ese código algún día.

P.d. Personalmente encuentro que Stetic es superior a Glade para el trabajo de diseño, aunque un poco más inestable.

 20
Author: Boris Terzic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-07 20:09:47

Use GtkBuilder en lugar de Glade, está integrado en Gtk en lugar de una biblioteca separada.

El principal beneficio de Glade es que es mucho, mucho más fácil crear la interfaz. Es un poco más de trabajo para conectar los controladores de señal, pero nunca he sentido que importa mucho.

 12
Author: John Millikin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-07 04:20:06

Glade es muy útil para crear interfaces, significa que puede cambiar fácilmente la GUI sin hacer mucha codificación. Encontrará que si desea hacer algo útil (por ejemplo, construir un treeview) tendrá que familiarizarse con varias partes de la documentación de GTK - en la práctica encontrar un buen tutorial/ejemplos.

 5
Author: 8128,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-10 15:04:33

Empecé usando glade, pero pronto me moví a simplemente hacer todo en código. Glade es bueno para cosas simples, y es bueno cuando estás aprendiendo cómo GTK organiza los widgets (cómo se empaquetan las cosas, etc.). La construcción de todo en el código, sin embargo, usted tiene mucha más flexibilidad. Además, no tienes la dependencia de Glade.

 5
Author: Jeremy Cantrell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-20 03:04:01

Normalmente empiezo con Glade hasta que llego a un punto en el que no tiene las características que necesito, por ejemplo, crear un asistente. Mientras esté usando los widgets estándar que proporciona Glade, realmente no hay razón para codificar a mano la GUI.

Cuanto más cómodo me siento con la forma en que Glade formatea el código, mejor se vuelve mi codificación manual. Sin mencionar que es muy fácil usar Glade para crear el marco subyacente para que no tenga que preocuparse por todas las inicializaciones.

 4
Author: crystalattice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-20 11:40:16

Si está escribiendo una aplicación GUI tradicional que reutiliza muchos componentes estándar de GTK+ (botones, etiquetas, contenedores, etc.) Yo personalmente iría con Glade + Kiwi (un marco de conveniencia para la construcción de aplicaciones GTK+ GUI).

La mayor ventaja de usar Glade es que reduce en gran medida el código de diseño/embalaje. Aquí hay un ejemplo extremadamente simple que ya muestra los problemas con el diseño manual de una interfaz gráfica de usuario (sin usar ninguna función auxiliar):

container = gtk.HBox()
label = gtk.Label(str="test")
container.add(label)

Para más ejemplos toma un mira aquí. Incluso si está escribiendo un widget personalizado complicado, siempre puede crear un marcador de posición en Glade y reemplazarlo después de la instanciación.

Ahora no debería ser demasiado tiempo para que el equipo de Glade lance una nueva versión del diseñador (3.6.0). Esta nueva versión agregará soporte para GtkBuilder, que reemplaza libglade (la biblioteca real que transforma los archivos XML de Glade en un árbol de widgets). El nuevo diseñador de Glade también una vez nuevamente agrega soporte para definir catálogos (conjuntos de widgets) en Python, por lo que puede agregar fácilmente sus propios widgets personalizados.

 4
Author: Bruce van der Kooij,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-07 21:19:04

Recomiendo usar Glade para un desarrollo rápido, pero no para aprender. ¿Por qué? debido a que algunas veces tendrá que ajustar algunos widgets con el fin de trabajar como desea que funcionen, y si realmente no sabe/entender los atributos de propiedades de cada widget, entonces usted estará en problemas.

 2
Author: markuz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-20 15:33:11

Para pantallas rápidas y sencillas utilizo Glade. Pero para cualquier cosa que necesite niveles más finos de control, creo clases personalizadas para lo que realmente necesito (esto es importante, porque es demasiado fácil dejarse llevar por generalizaciones).

Con un flaco aplicaciones clases específicas, puedo cambiar rápidamente el aspecto y la sensación de aplicación amplia desde un solo lugar. Más bien como usar CSS para mantener la consistencia de los sitios web.

 1
Author: CyberFonic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-13 22:02:10

Personalmente recomendaría codificarlo en lugar de usar Glade. Todavía estoy aprendiendo python y PyGTK, pero diré que escribir la interfaz de usuario a mano me dio mucha información sobre cómo funcionan las cosas bajo el capó.

Una vez que lo hayas aprendido, diría que le des a Glade u otros diseñadores de UI una oportunidad, pero definitivamente aprende a hacerlo de la manera "difícil" primero.

 1
Author: user78460,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-15 13:32:09

Primero, empieza a poner esto en perspectiva.

Va a utilizar GTK. Esta es una enorme biblioteca de C construida en 1993 utilizando las mejores tradiciones del estilo de codificación de la década de 1970. Fue construido para ayudar a implementar el GIMP, un competidor de Photoshop quiere ser con errores de interfaz de usuario de leyenda. Un campo gui típico podría tener cuarenta o más parámetros, en su mayoría repetitivos, con getters y setters. Habrá dolor.

El propio GTK gestiona un sistema de tipo dinámico completo en C usando GObject. Esto hace que la depuración sea una alegría especial que requiere caminar manualmente a través de matrices de punteros a métodos llenos de listas de argumentos genéricos con herencia implícita. También saltará a través de las bibliotecas de Pango cuando menos lo espere, por ejemplo, usando una constante de Pango para dónde en una etiqueta van los puntos suspensivos cuando la página es pequeña. Espere más dolor.

Por ahora, probablemente esté prometiendo envolver todas sus interacciones GTK en una arquitectura Modelo-Vista-Controlador específica para su aplicación. Esto es bueno.

Usando Glade, o GtkBuilder, o Stetic, ayudará a coral el enorme problema de acoplamiento de cuarenta parámetros a una función. Glade proporciona un generador de GUI básico para arrastrar y soltar componentes juntos. Los parámetros y los parámetros heredados están algo separados. La salida de Glade es .glade archivo XML que luego leerá, adjuntar sus devoluciones de llamada ("controladores de señal") a las funciones con nombre idéntico, y consultar o actualizar la versión en memoria de ese XML para obtener widgets que luego utilizas PyGTK para manipular. Glade sí mismo es un crujiente y no bien mantenido.

El uso de PyGTK le da un control muy fino para construir su GUI. Esto será detallado, copiar y pegar código. Cada atributo será una llamada a función separada. El attribute setter no devuelve nada, por lo que encadenar las llamadas está fuera de cuestión. Por lo general, su IDE le dará una ayuda mínima en lo que significan las funciones y se referirá constantemente a DevHelp o algunos otra herramienta.

Uno casi esperaría que las GUI GTK estuvieran destinadas a fallar.

 1
Author: Charles Merriam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-25 20:05:40

Puede usar glade-2 para diseñar, y usar glade2py.py para generar el código pygtk puro, utiliza pygtkcompat para soportar gtk3

 -1
Author: Shellexy Wang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-27 10:09:16