"Hola Mundo" con Python y GtkBuilder
Importante: Reemplazar cada # por una tabulación.
Hola, este es el primer tutorial que publico, espero con el tiempo mejorar mi calidad de redacción. Ahí va:
Vamos a ver como crear un sencillo programa que muestre un botón y al hacer click en él despliegue el mensaje "Hola mundo". Con este ejemplo se podrán aprender los pasos que en general se van a aplicar a cualquier otro programa hecho en Python y GtkBuilder. Hacer click en las imágenes para verlas en tamaño completo.
Herramientas necesarias:
Para construir la interfaz gráfica, vamos a usar Glade, un constructor de interfaces Gtk+.
Luego, necesitamos Python y los bindings de Gtk+ para Python.
Para este tutorial vamos a usar un IDE llamado Geany, que destaca por lo liviano y rápido que resulta.
Para instalar todo esto de una vez, en Debian/Ubuntu, simplemente ejecutamos el comando "sudo apt-get install python python-gtk2 glade geany" (sin comillas) en una consola. En Arch: "sudo pacman -Sy python pygtk glade geany".
(Nota: si usás Debian, asegurate de tener Squeeze para adelante para que te sirva el tutorial. Debian Lenny tiene versiones muy antiguas de glade, python y python-gtk y algunas cosas podrían ser diferentes).
Diseño de la interfaz:
Luego de instalar todo lo necesario, vamos a diseñar la interfaz de usuario de nuestra aplicación. Para eso, abrimos Glade.
En esta ventana dejamos las opciones como en la imagen y damos click a Cerrar:
Ahora se nos presenta la pantalla principal de Glade:
Creamos la ventana principal para nuestro programa, para eso hacemos click en la herramienta Ventana, el resultado es el siguiente:
Seleccionamos el botón y en la caja de propiedades, bajo la pestaña General, le ponemos por nombre "boton" y luego buscamos la propiedad Etiqueta y le cambiamos lo que tenga por "Click aquí":
Como se puede ver, lo que vaya en la propiedad Etiqueta es el texto que va a tener el botón. El nombre que le pusimos ("boton" ) nos va a servir para poder referirnos al boton y programarlo en el momento de escribir el código. Podemos ponerle cualquier nombre, lo que no es posible es dar a dos elementos distintos de la interfaz el mismo nombre.
Vamos a la pestaña Señales de las propiedades de nuestro botón, y en la señal "clicked" seleccionamos el manipulador "on_boton_clicked" (enseguida explico esto):
A continuación vamos a crear la ventana a mostrarse al hacer click en el botón. Para eso, creamos una nueva ventana de la misma manera en la que creamos la ventana principal y dentro de ella insertamos una etiqueta con la herramienta Etiqueta:
Cambiamos el texto de la propiedad Etiqueta de nuestra etiqueta por "Hola Mundo", bajo la pestaña General de sus propiedades:
Solo para hacer más fácilmente entendible todo, le cambiamos los nombres a las ventanas. Le ponemos "ventanaprincipal" a lo que era window1 y "ventanamensaje" a lo que era window2:
Por último, le damos el manipulador "on_ventanaprincipal_destroy" a la señal destroy de nuestra ventana principal:
Los manipuladores son la forma de llamar a las señales de cada elemento de nuestro programa a la hora de escribir el código. Por ejemplo, cuando programemos el manipulador "on_ventanaprincipal_destroy", estaremos dando las instrucciones a ser ejecutadas al momento de cerrar (destruir) la ventana principal de nuestro programa; cuando se cierre la ventana principal esta da la señal "destroy" y se ejecuta lo que hayamos programado en su manipulador. Lo mismo pasa con el boton, cuando se haga click en el este da la señal "clicked" y se ejecuta el código que escribamos en su manipulador. (Nota: esto es lo que aprendí y me funciona, y creo que se acerca mucho a lo que realmente sucede, pero podría no ser realmente la explicación más correcta sobre las señales y los manipuladores).
Antes de pasar al código en sí, guardamos nuestra interfaz como "mundo.xml" en el formato GtkBuilder. Para eso nos vamos a Archivo-Guardar Como y le damos "mundo.xml" como nombre a nuestro archivo, seleccionamos GtkBuilder en formato de archivo y damos click en Guardar.
Código del programa:
Ahora pasamos a la parte más importante de cualquier programa: su código.
Abrimos Geany:
Ahora comenzamos a escribir el código:
Primero importamos los módulos que vamos a utilizar:
import gtk
import pygtk
Ahora creamos una clase que llamaremos "mundo", que va a contener los elementos del programa y las instrucciones que le vamos a dar a cada uno de los manipuladores de las señales, y comenzamos a importar los elementos de nuestra interfaz gráfica (recordate de cambiar cada # por una tabulación):
#class mundo:
##def __init__(self):
###b= gtk.Builder()
###b.add_from_file("mundo.xml" )
###self.ventanaprincipal = b.get_object("ventanaprincipal" )
###self.boton = b.get_object("boton" )
###self.ventanamensaje = b.get_object("ventanamensaje" )
###b.connect_signals(self)
###self.ventanaprincipal.show()
Explicando línea por línea: primero se crea la clase, luego se define el "constructor". Dentro del mismo, agregamos el archivo "mundo.xml" que habíamos creado, y empezamos a importar de ese archivo cada uno de los elementos de nuestra interfaz. Después eso se conectan las señales y se muestra la ventana principal.
Vamos a definir ahora qué se hace al dar click al botón:
##def on_boton_clicked(self, widget, data=None):
###self.ventanamensaje.show()
Simplemente se muestra la ventana "ventanamensaje", que contiene el texto "Hola Mundo" al hacer click en el botón.
Ahora definimos qué hacer cuando se cierre la ventana principal:
##def on_ventanaprincipal_destroy(self, widget, data=None):
###gtk.main_quit()
Esto indica que termina el programa.
Por último, iniciamos la clase y el método gtk.main(), que se encarga de recibir las señales de los elementos de nuestra interfaz. Con estas dos líneas se da inicio al programa:
mundo()
gtk.main()
Guardamos el archivo como "mundo.py" en la misma carpeta en la que está el archivo "mundo.xml" creado anteriormente y lo ejecutamos directamente desde Geany presionando F5:
Al ejecutar el programa aparece la ventana principal con un botón. Al presionar el botón aparece otra ventana con el texto "Hola Mundo". Todo tiene una apariencia bastante mala, y vamos a ver en el siguiente tutorial como mejorar ese aspecto.
Pitonpy