ProgramacionGTKenPython/CapituloI

De Wiki GNOME Chile
Saltar a: navegación, buscar

Bienvenidos al primer capitulo de Programacion GTK+ en Python.

Contenido

Programando en GTK+

Si alguna vez vieron Programacion GTK en C, Capitulo I, se habran dado cuenta que programar, compilar y ejecutar la aplicacion son tres pasos por separado. A diferencia de lo anterior, programar en Python para GTK+ es mucho mas sencillo en un aspecto fundamental:

  • No es necesario compilar ni enlazar una aplicacion para ejecutarla

Usando C, lo tipico es compilar la aplicacion y enlazarla:

[email protected]:$ gcc -c programa.c `pkg-config --cflags gtk+-2.0 `
[email protected]:$ gcc -o programa programa.o `pkg-config --libs gtk+-2.0 `

Python da la ventaja de que no es necesario enlazar:

[email protected]:$ python aplicacion.py

Y listo.

Dependencias Basicas

La mayoria de las distribuciones que empaquetan GNOME para distribucion lo hacen junto con las dependencias basicas para ejecutar aplicaciones escritas en Python. Pero es mejor cerciorarse de lo anterior.

Es hora de usar la shell de Python:

[email protected]:$ python
Python 2.5.2 (r252:60911, May  7 2008, 15:19:09) 
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Para comprobar si la extension de GTK para Python esta instalada, solo ejecuten en la shell de Python:

>>> import gtk

No deberia dar error. En caso contrario:

>>> import gtk
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named gtk

Si ocurre eso, echen mano del manejo que tengan de su distribucion. Por lo general, las distribuciones basadas en Debian necesitan el paquete python-gtk2 (y sus dependencias).

Un primer programa en GTK+

Ahora veamos un ejemplo muy simple, un tipico "Hola Mundo".

import gtk
ventana = gtk.Window(gtk.WINDOW_TOPLEVEL)
ventana.set_title("Hola Mundo!")
ventana.show()
gtk.main()

Destripemos este ejemplo linea por linea.

Hola Mundo, version 0.1

import gtk

Permite usar GTK+ desde dentro de Python.

ventana = gtk.Window(gtk.WINDOW_TOPLEVEL)

Quiero detenerme un poco antes de seguir con lo siguiente. Y usar algunos "malos" ejemplos de otros lenguajes de programacion.

En C, lo tipico es definir la variable previamente y asignarle el tipo de dato:

#include <gtk.h>

GtkWidget * control;

control = gtk_window_new(GTK_WINDOW_TOPLEVEL);

Y usando la sintaxis de C++ (pseudocodigo):

#include <gtkmm.h>

GtkWidget * control;

control = Gtk_Window->new(GTK_WINDOW_TOPLEVEL);

La definicion de las variables en Python es mucho mas flexible que en otros lenguajes. Por otra parte, cada objeto importado en Python puede llamar a sus metodos (funciones), similar a la sintaxis de C++. En este caso, se importa el "objeto" (entre comillas) gtk y se usa el metodo Window(). A estas alturas, cuidarse del tipico "casting" de C ya no es un problema, lo que le da a Python bastantes puntos en la programacion en GTK+.

Despues de la "casi" facil explicacion, sigamos.

ventana.set_title("Hola Mundo!")

Solo llama al metodo set_title para cambiar el titulo de la ventana.

ventana.show()

Esta funcion indica a GTK+ que debe mostrar la ventana.

Y la magia termina cuando se llama al loop principal de GTK+:

gtk.Main()

Solo grabar esas lineas de texto en un archivo .py y ejecutar:

[email protected]:$ python holamundo.py


Controles

El primer control que aparecio en el ejemplo anterior fue el control GTK_WINDOW (ventana):

 ventana = gtk.Window(gtk.WINDOW_TOPLEVEL)

Cada control esta definido para ser llamado como un control del objeto gtk:

ventana = gtk.Window(gtk.WINDOW_TOPLEVEL)
boton = gtk.Button("Boton")
etiqueta = gtk.Label("Etiqueta")

Cada variable que tenga un control es llamado de la siguiente forma:

variable = gtk.Control(argumentos)

Luego, el control podra llamar a sus metodos :

variable.metodo(argumento1,argumento2,...)

Control Ventana

Es el mas basico para empaquetar controles.

ventana = gtk.Window(gtk.WINDOW_TOP_LEVEL)

El argumento de gtk.Window es el tipo de ventana a usar. Al igual que en C, es

  • WINDOW_TOP_LEVEL : generalmente usado, es para crear una ventana nueva que informe al Window Manager
  • WINDOW_POPUP : en caso de querer usar un pop-up, no manejado por el Window Manager

Control Etiqueta

El control de etiqueta se llama de la siguiente manera:

 etiqueta = gtk.Label("titulo de la etiqueta")

Control Boton

Al igual que el ejemplo anterior:

boton = gtk.Button("titulo del boton")

Control Contenedor

Este puede parecer complicado a primera vista. Pero no lo es.

En el capitulo I del curso de Programacion en GTK, se explico que algunos de los controles (Widgets) de GTK+ son contenedores, como las ventanas o los botones. En vez de convertir a los controles en contenedores, solo es necesario "agregar" el control a insertar en otro.

Es decir,

boton = gtk.Button("Boton")
ventana = gtk.Window(gtk.WINDOW_TOPLEVEL)
ventana.add(boton)

Y otro ejemplo similar (ya que el boton puede contener a una etiqueta):

boton = gtk.Button()
etiqueta = gtk.Label("Press me")
boton.add(etiqueta)


Metodos y Propiedades

Gracias a una de las funcionalidades de Python llamada "Introspeccion", es posible saber los metodos y propiedades de cualquier objeto importado.

Supongamos, por ejemplo, que quiero saber los metodos y propiedades de un control en particular, por ejemplo el control ventana.

Puedo, simplemente, ejecutar la ayuda de Python para saber lo que necesito:

>>> help (gtk.Window)

Supongamos que quiero saber como cambiar el titulo de la ventana. En la misma ayuda de Python se indica la funcion "set_title" (ya lo sabiamos de antes, en el curso de C). Asi que facilmente podria hacer

ventana = gtk.Window(gtk.WINDOW_TOPLEVEL)
ventana.set_title("Hola Mundo")

Leer entonces con calma la documentacion de cada uno de los metodos a usar.

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas