Germán Racca Blog

Un blog sobre Fedora y Astrofísica

Introducción a GTK+ 3 en Python | Getting started with Python GTK+ 3

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:

Ejemplo Simple

Para comenzar, crearemos el ejemplo más simple posible, el cual consiste de una ventana vacía.

ejemplo_simple.py
1
2
3
4
5
6
7
#!/usr/bin/python
from gi.repository import Gtk

win = Gtk.Window()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

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.

ejemplo_extendido.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/python
from gi.repository import Gtk

class MyWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Hello World")

        self.button = Gtk.Button(label="Click Here")
        self.button.connect("clicked", self.on_button_clicked)
        self.add(self.button)

    def on_button_clicked(self, widget):
        print "Hello World"

win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

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.

Comments