Programación en PyGTK
Lo mejor de dos mundos

por Margarita Manterola

Python

Lenguaje sencillo, de muy rápido aprendizaje

Interpretado.

Orientado a objetos.

Sí, es sensible a la indentación.

Un ejemplo de código python

#!/usr/bin/env python

import sys, string

class Echo:

def __init__(self, message=""):

print message

if __name__ == "__main__":

Echo( string.join(sys.argv[1:], " ") )

GTK+

Biblioteca gráfica utilizada por GNOME.

Portada a otros sistemas operativos.

Desarrollada en C, utilizando un modelo de objetos y eventos.

Desventaja principal: las aplicaciones finales desarrolladas en C tienen un código muy poco legible y, por lo tanto, muy poco depurable.

PyGTK

Permite utilizar GTK programando en Python.

Utilizando el modelo de objetos de forma natural.

Obteniendo los mismos resultados que si se programara en C (apenas un poco más lento).

Sin problemas de leaks, segfaults, etc.

Ejemplo de pyGTK

#!/usr/bin/env python

import gtk, pygtk, sys, string

class GtkEcho:

def __init__(self, msg=""):

self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

self.window.connect("destroy", self.destroy)

self.label = gtk.Label(msg)

self.window.add(self.label)

self.label.show()

self.window.show()

gtk.main()

def destroy(self, widget, data=None):

gtk.main_quit()

if __name__ == "__main__":

GtkEcho(string.join(sys.argv[1:]," "))

Diseñando con Glade

Usando Glade

#!/usr/bin/env python

import gtk, gtk.glade, pygtk, sys, string

class GladeEcho:

def __init__(self, msg=""):

self.glade = gtk.glade.XML ("gladeecho.glade", "main_window")

self.glade.get_widget("label").set_text(msg)

self.glade.signal_autoconnect({"gtk_main_quit":gtk.main_quit})

gtk.main()

if __name__ == "__main__":

GladeEcho(string.join(sys.argv[1:]," "))

Ventajas

El diseño visual nos acerca a los usuarios.

Es posible cambiar el aspecto del programa sin tocar el código.

El código del programa (casi) se limita a la lógica, se minimiza el código de presentación.

Manejo nativo de señales y eventos.

Soporte de gettext sin mayor esfuerzo.

2005-10-10T14:07:37