ProgramacionGTKenPython/CapituloI
(→Metodos y Propiedades) |
(→Controles) |
||
(No se muestra una edición intermedia realizada por un usuario) | |||
Línea 91: | Línea 91: | ||
<pre>usuario@maquina:$ python holamundo.py</pre> | <pre>usuario@maquina:$ python holamundo.py</pre> | ||
− | |||
= Controles = | = Controles = |
Última revisión de 16:26 8 nov 2008
Bienvenidos al primer capitulo de Programacion GTK+ en Python.
Contenido |
[editar] 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:
user@maquina:$ gcc -c programa.c `pkg-config --cflags gtk+-2.0 ` user@maquina:$ gcc -o programa programa.o `pkg-config --libs gtk+-2.0 `
Python da la ventaja de que no es necesario enlazar:
user@maquina:$ python aplicacion.py
Y listo.
[editar] 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:
user@maquina:$ 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).
[editar] 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.
[editar] 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:
usuario@maquina:$ python holamundo.py
[editar] 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,...)
[editar] 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
[editar] Control Etiqueta
El control de etiqueta se llama de la siguiente manera:
etiqueta = gtk.Label("titulo de la etiqueta")
[editar] Control Boton
Al igual que el ejemplo anterior:
boton = gtk.Button("titulo del boton")
[editar] 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)
[editar] 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.