Toma de contacto con Pygtk.

Hola a tod@s de nuevo, como prometí voy a empezar a escribir una serie de tutoriales para empezar a programar para Gtk 2 en python gracias al módulo PyGtk.

Una cosa importante es conocer la tecnología para la que vamos a programar, así que, un poquito de historia, Gtk 2 es un conjunto de bibliotecas que nos permite crear interfaces gráficas, es una librería mantenida por el equipo de Gnome y es la competencia directa de Qt. Gtk 2 se ha usado en entornos tan populares como MATE, XFCE y Gnome 2 (entre otros), siendo este último el mejor DE para muchos usuarios de GNU/Linux.

Estéticamente es una librería que trata de proporcionar interfaces simples, sencillas, minimalistas y muy configurables, razón por la cual es tan famosa.

XFCE4 en ArchLinux de 64 bits


Dejando ahora un poco de lado la trayectoria de esta biblioteca, vamos a empezar a meternos un poco en el código, empezaremos con algo muy simple, ya que es el primer tutorial.

Un ejemplo de una simple ventana, sin nada dentro, sin ningún Widget ni nada parecido, simplemente para ver la estructura básica que tendría un programa en PyGtk:

#!/usr/bin/python2

import pygtk
import gtk
pygtk.require('2.0')

class Base:
    def __init__(self):
        self.mi_ventana = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.mi_ventana.show()

    def principal(self):
        gtk.main()

if __name__ == "__main__":
    base = Base()
    base.principal()

Guardamos eso como prueba.py, después le damos permisos de ejecución y lo ejecutamos con un simple "./prueba.py", nos aparecerá una simple ventana Gtk 2 sin nada en su interior:



La estructura básica es así de simple, con la linea 3 y 4 importamos los módulos necesarios para hacer uso de Gtk y PyGtk, con la linea 5 decimos que como mínimo, debemos de tener PyGtk 2.0 o una versión posterior, evitando que alguien que esté en un entorno de tipo Gtk 1.0 pueda intentar ejecutar nuestra aplicación.

De la linea 7 a la 13 definimos una clase que va a ser prácticamente todo el programa, en esta clase existen dos métodos bien diferenciados, por un lado, tenemos el constructor que va de la linea 8 a la 10, en el cual la linea 9 crea una nueva ventana llamada "mi_ventana" usando el método "Window" de "gtk", (todos los elementos en PyGtk son del tipo gtk.algo), a este método se le pasa como argumento ("gtk.WINDOW_TOPLEVEL"), esto hace que se use el decorador de ventanas propio del tema del sistema (en mi caso mediterranean night) y el método "show" de la ventana creada, ordenamos a Gtk que nos muestre la ventana, algo así como lo que era el método "pack()" en tkinter.

Este primer método (el constructor) de la clase base, es donde se declararán todos los widgets, botones, selectores... de nuestra interfaz. El segundo método que nos encontramos en la clase llamado "principal" (lineas 12 y 13), es donde se ejecuta "gtk.main()", que digamos que es como lo que arranca Gtk, maneja eventos de teclado y ratón, salida y entrada... y es la función que nos va a permitir interactuar con la aplicación, la cual, una vez definido en el constructor toda la estructura de la interfaz, todos sus widgets... esperará para gestionar los distintos eventos que nos permiten la interacción con ella.

En este ejemplo, no hay ninguna interacción, ya que aún no hemos visto widgets, botones, cajas de texto... elementos que veremos en posteriores tutoriales.

Después, las lineas 15, 16 y 17 crean una instancia de la clase base y llaman a su método "principal", pero solo si se está ejecutando como un programa y no como un módulo (está práctica ya la expliqué en anteriores tutoriales).

Bueno, hasta aquí el tutorial de hoy, espero que os haya gustado, es importante que esto lo entendáis bien, por que es la base de PyGtk, un abrazo a tod@s y hasta el siguiente tutorial.

5 comentarios:

PythonDiario dijo...

Excelente... justo estoy empezando con Pygtk... Muchas gracias y por supuesto, muy bueno el blog.

Francisco Dominguez Lerma dijo...

Gracias Diego por pasarte y comentar, me alegro de que te haya servido de ayuda.

¡ Un saludo !

Dan dijo...

Vale ya tengo internet en cuanto me den linea empiezo , muy bueno aunque se ve que es mas complicado que tkinter

Francisco Dominguez Lerma dijo...

Me alegro de que ya tengas internet Daniel, y tranquilo que tampoco es mucho más complicado que Tkinter.

Un saludo.

Anónimo dijo...

Estimado: Un código mas simple sería:

import gtk

class App:
def __init__(self):

self.ventana = gtk.Window()
Self.ventana.show()

App()
gtk.main()