Esta especie de tutorial de PyGObject (Python y GTK+ 3) es casi una traducción literal de su documentación. Más que un tutorial, es el ejemplo más simple de como crear una ventana vacía. Seguidamente, extenderemos el script para agregarle un botón que realiza una determinada acción. Se necesita un conocimiento razonable del lenguaje Python, el cual dudo en tener :-)
Antes de comenzar, recomiendo los siguientes documentos para que podamos aprender un poco más sobre PyGObject:
https://developer.gnome.org/gnome-devel-demos/stable/tutorial.py.html.en
http://pfrields.fedorapeople.org/presentations/OhioLF2011/PyGObject.pdf
Ejemplo Simple
Para comenzar, crearemos el ejemplo más simple posible, el cual consiste de una ventana vacía.
1 2 3 4 5 6 7 |
|
Explicaremos ahora cada línea del ejemplo.
#!/usr/bin/python
La primera línea de todos los programas en Python debe empezar con #!
seguido del camino al intérprete Python que queremos invocar.
from gi.repository import Gtk
Para poder acceder a las clases y funciones de GTK+, primero debemos importar el módulo Gtk. La próxima línea crea una ventana vacía.
win = Gtk.Window()
Seguidamente, conectamos la ventana a su evento delete para asegurarnos de que la aplicación termine al cliquear en la x de la ventana.
win.connect("delete-event", Gtk.main_quit)
En el próximo paso mostramos la ventana.
win.show_all()
Finalmente, iniciamos el loop de procesamiento de GTK+, del cual saldremos cuando la ventana sea cerrada (ver línea 5).
Gtk.main()
Para ejecutar el programa, abrimos una terminal, cambiamos el directorio hasta donde está el archivo (al cual le llamé ejemplo_simple.py), y ponemos:
$ python ejemplo_simple.py
Alternativamente, podemos darle permisos de ejecución y luego ejecutarlo:
$ chmod +x ejemplo_simple.py
$ ./ejemplo_simple.py
Ejemplo Extendido
Para algo un poco más útil, aquí está la vesión en PyGObject del clásico programa Hello World.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
A diferencia del ejemplo simple, aquí creamos una sub-clase de Gtk.Window
para definir nuestra propia clase MyWindow
.
class MyWindow(Gtk.Window):
En el constructor de la clase, tenemos que llamar al constructor de la super-clase. Además, le diremos que dé el valor de Hello World
a la propiedad title
.
Gtk.Window.__init__(self, title="Hello World")
Las próximas tres líneas son usadas para crear un botón (widget), conectarlo a su señal clicked
, y adicionarlo como hijo a la ventana.
self.button = Gtk.Button(label="Click Here")
self.button.connect("clicked", self.on_button_clicked)
self.add(self.button)
En consecuencia, el método on_button_clicked()
será llamado si cliqueamos en el botón.
def on_button_clicked(self, widget):
print "Hello World"
El último bloque, fuera de la clase, es muy similar al del ejemplo simple de más arriba, pero en lugar de crear una instancia de la cláse genérica Gtk.Window
, creamos una instancia de MyWindow
.