python - example - Glade o no glade: ¿Cuál es la mejor manera de usar PyGtk?
pygobject windows (11)
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. Trabajar un poco más para manejar manejadores de señal, pero nunca sentí que eso importe mucho.
He estado aprendiendo Python por un tiempo ahora con algo de éxito. Incluso logré crear uno o dos programas (simples) usando PyGtk + Glade.
Lo que pasa es que no estoy seguro de si la mejor forma de usar GTK con python es construyendo las interfaces usando Glade.
Me preguntaba si los más experimentados entre nosotros (recuerden, soy solo un principiante) podrían señalar los beneficios y advertencias del uso de Glade en lugar de crear todo en el código en sí (suponiendo que aprender las correctas encuadernaciones gtk no exactamente sea un problema).
Yo diría que eso depende: si encuentras que usar Glade puedes construir las aplicaciones que quieres o necesitas hacer de lo que está absolutamente bien. Sin embargo, si realmente quiere aprender cómo funciona GTK o si tiene algunos requisitos de UI no estándar, tendrá que profundizar en las partes internas de GTK (que no son tan complicadas).
Personalmente, en general llevo unos 5 minutos en un cliente rico cuando necesito alguna característica o personalización que simplemente es 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í iniciar el diseño de la ventana usando una herramienta gráfica.
Mi recomendación: si hacer que los clientes ricos que usan GTK vayan a ser una parte importante de su trabajo / hobby, entonces también aprenda GTK ya que tendrá que escribir ese código algún día.
PD. Personalmente, considero que Stetic es superior a Glade para el trabajo de diseño, aunque un poco más inestable.
Glade es muy útil para crear interfaces, lo que significa que puede cambiar fácilmente la GUI sin hacer demasiada codificación. Descubrirá que si desea hacer algo útil (por ejemplo, construir una vista en árbol) deberá familiarizarse con varias partes de la documentación de GTK, en la práctica encontrando un buen tutorial / ejemplos.
Comencé a usar glade, pero pronto pasé 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 empacan las cosas, etc.). Construyendo todo en código, sin embargo, tiene mucha más flexibilidad. Además, no tienes la dependencia del claro.
Normalmente empiezo con Glade hasta que llego al punto en que no tiene las características que necesito, por ejemplo, crear un asistente. Siempre que use los widgets estándar que proporciona Glade, no hay realmente ninguna razón para codificar manualmente la GUI.
Cuanto más me siento cómodo 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, por lo que no debes preocuparte por todas las inicializaciones.
Para pantallas rápidas y simples, uso Glade. Pero para cualquier cosa que necesite niveles de control más finos, creo unas clases personalizadas para lo que realmente necesito (esto es importante, porque es muy fácil dejarse llevar por las generalizaciones).
Con unas clases específicas para aplicaciones delgadas, puedo cambiar rápidamente la apariencia y la aplicación de un solo lugar. Más bien como usar CSS para mantener la consistencia para los sitios web.
Recomiendo usar Glade para un desarrollo rápido, pero no para el aprendizaje. ¿Por qué? porque algunas veces tendrá que ajustar algunos widgets para que funcionen como desea que funcionen, y si realmente no conoce ni comprende los atributos de propiedades de cada widget, entonces tendrá problemas.
Si está escribiendo una aplicación GUI tradicional que reutiliza una gran cantidad de componentes estándar de GTK + (botones, etiquetas, contenedores, etc.) yo personalmente iría con Glade + Kiwi (un marco práctico para compilar aplicaciones GTK + GUI).
La mayor ventaja para 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 despliegue manual de una GUI (sin usar ninguna función auxiliar):
container = gtk.HBox()
label = gtk.Label(str="test")
container.add(label)
Para ver más ejemplos, 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 creación de instancias.
No debería ser demasiado largo ahora para que el equipo de Glade publique una nueva versión del diseñador (3.6.0). Esta nueva versión agregará soporte para GtkBuilder, que reemplaza a 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 más agrega soporte para definir catálogos (conjuntos de widgets) en Python, por lo que puede agregar fácilmente sus propios widgets personalizados.
Personalmente recomiendo 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 una gran idea de cómo funcionan las cosas bajo el capó.
Una vez que lo haya aprendido, le diría que intente convencer a Glade u otros diseñadores de UI, pero definitivamente aprenderé a hacerlo de la manera "difícil" primero.
Primero, comienza a poner esto en perspectiva.
Estarás usando GTK. Esta es una gran biblioteca C construida en 1993 con las mejores tradiciones del estilo de codificación de los años setenta. Fue creado para ayudar a implementar GIMP, un competidor de Photoshop que quiere cometer errores con la interfaz de usuario de la leyenda. Un campo de GUI típico puede tener cuarenta o más parámetros, en su mayoría repetitivos, con captadores y decodificadores. Habrá dolor
El GTK mismo maneja un sistema de tipo dinámico completo en C usando GObject. Esto hace que la depuración sea una alegría especial que requiere recorrer manualmente 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, p. Ej., Utilizando una constante de Pango para ver en qué lugar de una etiqueta van las elipsis cuando la página es pequeña. Espera más dolor.
A estas alturas, probablemente esté prometiendo ajustar todas sus interacciones GTK en una arquitectura Model-View-Controller específica para su aplicación. Esto es bueno.
Usar Glade, o gtkBuilder, o Stetic, ayudará a coralizar el gran 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 un archivo .glade XML que luego leerá, adjunte sus devoluciones de llamada ("manejadores de señal") a funciones con nombre idéntico, y consulte o actualice la versión en memoria de ese XML para obtener widgets que luego use pyGTK manipular. Glade es un crujido y no está bien mantenido.
El uso de pyGTK le proporciona un control molesto y detallado para construir su GUI. Este será un código detallado, copie y pegue código. Cada atributo será una llamada de función separada. El ajustador de atributos no devuelve nada, por lo que encadenar las llamadas está fuera de cuestión. Por lo general, su IDE le brindará una ayuda mínima sobre las funciones y se referirá constantemente a DevHelp u otra herramienta.
Casi cabría esperar que las GUI de GTK estuvieran destinadas a fallar.
Puedes usar glade-2 para diseñar, y usar glade2py.py para generar el código pygtk puro, usa pygtkcompat para soportar gtk3