Python + PyGTK
Python aunque es un lenguage multiplataforma no posee una librería para hacer aplicaciones gráficas como por ejemplo lo es el AWT o Swing para java, sin embargo hay wrappers para diferentes librerías multiplataforma de controles o widgets para desarrollar una aplicación con interfaz, mencionaré algunas a continuación para después proseguir a tratar PyGTK.
La que nos interesa en este momento es pygtk que es el wrapper para acceder a gtk. Y lo haremos a travez de una aplicación en la cual diseñaremos gráficamente desde glade3.
Objetivo
Construir una aplicación que permita al usuario en una caja de texto y cuando de enter o pulse el botón se cambiará una etiqueta que contiene la aplicación.
Construyendo la interfaz desde glade3
Cuando abrimos la aplicación, seleccionamos estas opciones para que sea compatible con las versiones anteriores ya que el soporte para GtkBuilder es algo nuevo, esto nos indicará si usamos cosas muy nuevas.

Lo que necesitamos es crear una ventana como la siguiente que por defecto se llamara “window1″

después agregamos un manejador vertical con 3 lugares como el que se muestra en la imagen siguiente

Ahora agregamos una caja de entrada que por defecto se llamara “entry1″

y también agregamos un label que por defecto se llamara “label1″

finalmente agregamos un botón que se llamara por defecto “button1″

Modificando los valores de las propiedades
En la parte derecha modificamos las propiedades como el texto que despliegan los controles uno a la vez de “label1″ y “button1″ para que finalmente el diseño quede como

Guardando la interfaz en el formato correcto
Finalmente lo guardamos con nombre “interfaz.xml” y con los valores que tiene en ese momento el cuadro de dialogo en la carpeta donde se encuentra el archivo en python.

Conectando un evento
La programación en gtk es basada en señales y eventos, un widget puede generar señales y tu programa debe de conectarse a ellas en orden de poder reaccionar a cada evento, cada evento que llega a tu aplicación puede que tenga más de un argumento de entrada.
Reaccionando al cierre de la ventana
La ventana de la derecha que despliega las propiedades de cada widget, también nos muestra una página seleccionable llamada “Señales” mediante la cual seleccionando window1 abres las señales heredadas de GtkObject e insertas el nombre de la nueva señal “on_window1_destroy” en “destroy”, esto es una convención notarás que si empiezas con las palabras “on_” el resto de la cadena se auto-completará y finalmente el nombre queda de la forma “on_” + nombre de objeto + “_” + nombre de la señal.

Reaccionando al enter en la caja de texto
Se hace similar para la entry1 en su señal activate que es de su propia clase GtkEntry. Con esto se puede simular el click del botón apretando la tecla enter.

Reaccionando al click en el botón
Se hace similar para el botón button1 en su señal clicked que es de su propia clase GtkButton

El código que necesitamos para reaccionar a este evento y cumplir con nuestro objetivo es el siguiente, contiene algunos comentarios para clarificar que es lo que esta pasando.
# -*- coding: utf-8 -*- import pygtk pygtk.require("2.0") import gtk class App: def __init__(self): # Obtenemos el objeto que lee el formato de GtkBuilder self.builder = gtk.Builder() # Leémos de el archivo interfaz.xml lo que hemos diseñado self.builder.add_from_file("interfaz.xml") # por medio de connect_signals que recibe un diccionario que contiene # "nombreDeLaSeñalEnGlade3": metodoQueSeConectaYManejaLaSeñal # conectamos las 3 señales: cerrar la ventana, enter en el text entry # click en el botón self.builder.connect_signals({ "on_button1_clicked":self.on_button1_clicked, "on_window1_destroy":self.on_window1_destroy, "on_entry1_activate":self.on_entry1_activate }) # obtenemos la ventana principal "window1" y la mostramos self.window1 = self.builder.get_object("window1") self.window1.show() def cambiarTexto(self): # obtenemos de la descripción de la interfaz # aquel objeto que deseamos acceder (label1 y entry1) # accedemos a sus métodos para obtener el texto del entry1 # y poner ese texto en el label1 lbl = self.builder.get_object("label1") txtentry = self.builder.get_object("entry1") lbl.set_text(txtentry.get_text()) def on_button1_clicked(self, evento): # cuando maneja la señal del click en el botón 1, cambiarTexto self.cambiarTexto() def on_entry1_activate(self, evento): # cuando maneja la señal del enter en la entrada 1, cambiarTexto self.cambiarTexto() def on_window1_destroy(self, evento): # cuando maneja la señal de cerrar la ventana principal # salir del ciclo de gtk con gtk.main_quit gtk.main_quit() def main(): app = App() if __name__ == "__main__": main() # Esto es importante, es lanzar el ciclo de eventos # y el kernel principal de nuestra aplicación, sin esto # nuestra aplicación simplemente terminaría sin haber mostrado nada al usuario # o haber reaccionado a algún evento o lanzado alguno. gtk.main()
Ahora puedes correr la aplicación y ver como funciona. Finalmente si deseas descargar el código anterior con todo y el archivo interfaz.xml lo puedes descargar aquí.
Quizá te interese :
Trabajando en un manual para Ubuntu 10.04, me he estado enfocando en la instalación y configurac ...
Este programa permite pasar una imagen a escala de grises, obtener su histograma y aplicar un fi ...
Internet Móvil Como es saberse en la actualidad el internet móvil es una tecnología que ha teni ...








