Breve tutorial de introducción a la programación con python+glade.



Documentos relacionados
Curso Internet Básico - Aularagon

CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES, BILIB RECETA TECNOLÓGICA REALIZACIÓN DE COPIAS DE SEGURIDAD CON GSYNC

CORREO ELECTRÓNICO GMAIL. 1 Enviar correo electrónico Acceder a una cuenta de correo electrónico... 2

Manual de uso básico de la aplicación

Tutorial de uso. ScanIPTV V.4.7

CÓMO CREAR NUESTRO CATÁLOGO

Comercial Cartas de Fidelización

Qué es una máquina virtual?

PASOS PARA CREAR UNA PÁGINA WEB

PREPARANDO EL ENTORNO DE DESARROLLO PARA PROGRAMAR EN PHP. DESCARGAR E INSTALAR NOTEPAD++ (CU00808B)

Impress : Programa de presentaciones de OpenOffice.

UTILIZACIÓN DE UNA CUENTA DE CORREO ELECTRÓNICO (NUEVO) Acceso al correo electrónico

Manual de uso básico de la aplicación

Manual de OpenOffice Impress

NORMA (SEPA) 22/11/2013

Instalación del programa PSPP y obtención de una distribución de frecuencias.

**NOTA** las partes tachadas todavía no están escritas, se ira actualizando poco a poco el documento

Plantillas Office. Manual de usuario Versión 1.1

MANUAL BÁSICO DE WRITER

Internet Information Server

MANEJANDO FICHEROS Y CARPETAS

Tutorial de Introducción a la Informática Tema 0 Windows. Windows. 1. Objetivos

Curso de PHP con MySQL Gratis

INSTALACIÓN DE ORACLE 8i (8.1.7) SOBRE NT

GUÍA RÁPIDA DE TRABAJOS CON ARCHIVOS.

Manual de ayuda para la utilización del Correo Interno en el Campus Virtual

INSTALACIÓN DE JOOMLA EN UN SERVIDOR LOCAL

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

Índice general de materias LECCIÓN 7 74

FeriaOnline.com C/Llamaquique Nº 4 Tfno: Oviedo mail: info@feriaonline.com Url:

SUBIR ARCHIVOS CON FTP. TRABAJAR EN UN SERVIDOR REMOTO. CREAR UNA PÁGINA WEB CON PROGRAMACIÓN PHP. (CU00814B)

AGREGAR UN EQUIPO A UNA RED Y COMPARTIR ARCHIVOS CON WINDOWS 7

TEMA 5: HOJAS DE CÁLCULO. Edición de hojas de cálculo con OpenOffice Calc

Enviar Felicitación Navideña por con Off. 2007

Plantilla de texto plano

Editor de textos para Drupal: TinyMCE

Manual de uso de la plataforma para monitores. CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib

En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas.

Instalación de ActivePerl en MS Windows

Manual. Sistema De. Plataforma Virtual. Docente. Estudiante MANUAL MANUAL DE MANUAL. del Usuario. Coordinador. MICROSOFT PowerPoint v2.

GUÍA RED SOCIAL FACEBOOK

TUTORIAL DE INSTALACIÓN PARA VIRTUALBOX

5.2.1 La Página Principal

MANUAL DE AYUDA MÓDULO GOTELGEST.NET PREVENTA/AUTOVENTA

Informática 1 Grado en Matemáticas

Autores: Mª Inés González Soler Raúl Martínez Alonso Patricia Pérez Vallés

1 MANUAL DE INSTALACIÓN

CITRIX Citrix Application Streaming

DESCARGA E INSTALACIÓN DE LA DOCUMENTACIÓN PARA LAS CLASES DEL API DE JAVA. CONSULTAR EN LOCAL O EN INTERNET? (CU00910C)

1.1.- Introducción a la Web Vemos una introducción al medio donde se encajan los lenguajes que vamos a tratar: la web.

Módulo 8: Ofimática básica. Unidad didáctica 4: Introducción y modificación de datos. Access

Poner músicas por mumble en PDR for DUMMIES

INSTALACIÓN DE SIESTTA 2.0 EN UN HOSTING (Ejemplo para Guebs.com)

Manual de usuario de Solmicro BI. Página 1

El proceso de edición digital en Artelope y CTCE

MANUAL DE USUARIO DE LA HERAMIENTA CONFIGURACION DE PRESUPUESTOS PARA DISTRIBUIDORES

Manual de NVU Capítulo 5: Las hojas de estilo

Cómo gestionar menús en Drupal 7

Sincronización de carpetas con el disco duro virtual en sistemas GNU/Linux

Módulo mod_banners para insertar y visualizar anuncios o publicidad (banners) en Joomla. Contador. (CU00446A)

Guía para realizar trabajos universitarios

Cómo instalar fácilmente tu WordPress tras contratar un hosting en Hostalia

Estructurar la información dentro del ordenador:

MIGRACIÓN DEL MOODLE A MESTRE A CASA

Manual de usuario de Windows Live Writer

Instalación de DRIVER de mochila

GUÍA PASO A PASO DE LA INTERFAZ Y GRABACIÓN DE GAMEPLAY

Cobian Backup. Inguralde [Enero 2011]

Manual de NVU Capítulo 4: Los enlaces

Instructivo Asesoría Básica Comunidad Virtual SharePoint 2010

La ventana de Microsoft Excel

Vamos a ver las dos formas básicas de arrancar PowerPoint.

RESOLUCIÓN DE ERRORES EN MOODLE CAMPUS VIRTUAL-BIRTUALA UPV-EHU

Región de Murcia Consejería de Educación, Ciencia e Investigación. Manual Usuario FCT

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

Qué es y para qué sirve Excel2007?

Herramienta programación de placas KKmulticopter

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: Fax.:

TUTORIAL PRÁCTICO DE BASES DE DATOS EN ACCESS CREAR UNA AGENDA

Guía de instalación de Gesclivet.

Manual Impress Impress Impress Impress Impress Draw Impress Impress

Instituto Nacional de Formación Docente. Tutorial 5 Líneas de Tiempo con Timerime

Análisis de aplicación: Geany

ACTIVAMOS NUEVOS PLUGINS

CURSO SOBRE LA PDi SMART USO DEL SOFTWARE NOTEBOOK.

MATERIAL 2 EXCEL 2007

Manual de iniciación a

Comerciales. Comisiones en Documentos de Venta WhitePaper Enero de 2008

TUTORIAL PHP WEBQUEST

AGREGAR COMPONENTES ADICIONALES DE WINDOWS

Combinar correspondencia (I)

Muchos programas de aplicación contienen herramientas para proteger la información, por ejemplo, Microsoft Word que te permite:

Una plantilla es un modelo que puede servir como base para muchas hojas de cálculo. Puede incluir tanto datos como formatos.

QUÉ ES HOMEBASE? Encontrar Libros

MANUAL MÓDULO CECA CON RECARGOS O DESCUENTOS PARA PRESTASHOP Guía Básica

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

Lectura de datos. Marcelo Reyes Notas sobre gretl 1.8.6cvs

Como Crear Distro Personalizada

Transcripción:

Breve tutorial de introducción a la programación con python+glade. Este texto se preparó para los cursos 2005 del hacklab Metabolik Bio Hacklab de Bilbao por Jon Latorre Martinez. En el se explica de manera breve y directa como empezar a crear aplicaciones gráficas con el lenguaje de programación python y el diseñador de interfaces GTK glade. Cualquier comentario es bienvenido. Puedes encontrarme en la dirección de correo electrónico moebius@etxea.net. También suelo estar en el IRC, servidor irc.freenode.org canal #metabolik, nick moebius o moe_evil. Revisiones: 2005/03/20: v0.1 Primera versión online. Copyright: Jon Latorre Martinez, 2005. COPYLEFT Se otorga permiso para copiar, distribuir y/o modificar este documento bajo las condiciones de la Licencia Creative Commons, con las siguientes opciones: Nombrar al autor y trabajos derivados han de tener una licencia similar. Para mas información visitar: http://creativecommons.org/licenses/by-sa/2.0/

Porque python+gtk+glade? Python Python es el lenguaje de script de moda. Como dicen en su web es un lenguaje interpretado (no se compila, se interpreta al ejecutarse, por lo tanto trabajamos con ficheros de texto), interactivo (tenemos disponible una consola donde podemos programar y ejecutar en tiempo real y ver como responde) y orientado a objetos (de una manera sencilla que hace muy natural el utilizarlo). Una de sus mayores ventajas es que obliga a programar de manera limpia (la indentación es significativa). Esta claramente de moda y cada mes aparecen nuevos módulos, bindings, APIs, etc. Su sintaxis clara y el que sea bastante potente permite desarrollar aplicaciones en tiempos muy cortos. Como desventaja está en consumo de recursos que implica. Es muy portable, ya que funciona en distintas plataformas: UNIX (GNU/Linux, *BSD,etc), en Windows, OS/2, Mac, Amiga... GTK+ GTK viene de The GIMP toolkit y como su nombre indica se creo para que lo usase GIMP. Un toolkit gráfico se encargase de pintar botones y otros controles necesarios para tener una interfaz gráfica de usuario. Internamente tiene distintos componentes (Glib para tipos de datos, pango para mostrar letras en cualquier alfabeto, ATK para accesibilidad,..) y aunque en principio fue creado para usarlo desde C/C++ ahora mismo hay soporte (bindings) GTK para multitud de lenguajes (como perl, python, ruby e incluso php :) Es multiplataforma (funciona en las distintas arquitecturas que soporta GNU/Linux y otros Unices libres BSD etc, MS Windows, MacOSX, etc) y es software libre (aunque licenciado bajo la LGPL) Glade Glade es el diseñador de interfaces gráficas para GTK. La idea es poder definir de manera gráfica y rápida una interfaz gráfica. Luego veremos que además de controles (widgets) GTK podremos usar controles GNOME (aunque con esto perderemos portabilidad). Otras opciones Otros toolkits graficos: Tenemos disponibles desde python unos cuantos toolkits mas: QT xwindows TK Otros lenguajes

ruby perl php Crear una aplicación paso a paso Vamos a ver como crear una aplicación en 3 sencillos pasos. Crearemos una aplicación muy sencilla y por ello podemos seguir estos pasos en orden. Cuando creemos una aplicación mas compleja iremos hacia adelante y hacia atrás por estos pasos un montón de veces. Paso 1: Crear la interfaz con glade Diseño de la GUI Lo primero será arrancar glade. Nos encontraremos que glade tiene varias ventanas: Si nos fijamos en la paleta todos los controles aparecen deshabilitados. Esto es por que no tenemos un proyecto abierto. Vamos a crear uno haciendo click en nuevo en la ventana principal de glade (arriba a la izquierda en la captura). Nos preguntara el tipo de proyecto que deseamos. Si queremos que nuestra aplicación sea lo más portable posible tendremos que elegir GTK+ y renunciar a usar los controles específicos de GNOME.

Ahora la paleta nos muestra los controles que tenemos disponibles en 3 categorías. Como podemos ver las categorías son GTK+ Básico donde se encuentran la mayoría de los controles que usaremos. GTK+ Adicional donde hay algunos controles adicionales que no usaremos muy a menudo. Y por ultimo Obsoletos, que son controles GTK que se mantienen por compatibilidad pero que es posible que desaparezcan. Si hubiésemos elegido un proyecto de tipo GNOME tendríamos una categoría adicional con los controles de GNOME. Entonces haciendo uso de los controles BONOBO podríamos cargar cualquier componente de GNOME en nuestra aplicación. Una vez que hemos creado un nuevo proyecto de tipo GTK el primer paso será crear una ventana de aplicación. Para ello hacemos click en el primero icono (el superior izquierdo) de la paleta de glade (que se llama Ventana). Esto nos creara una ventana que será la ventana donde coloquemos el resto de controles.

Una vez tengamos la ventana principal lo que tenemos que hacer es pensar como vamos a repartir los controles y en función de ello y usando las cajas (tanto horizontales como verticales o usando tablas). También podríamos hacer uso del contenedor que permite colocar estáticamente los controles, pero de esta manera al cambiar el usuario el tamaño de la ventana no aprovecharíamos todo el tamaño de ella. Bueno, vamos a empezar por crear una caja vertical con 3 cajones. Y dentro del primer cajón crearemos una caja horizontal de 2 cajones. Aquí podéis ver el resultado. En el árbol de controles (widgets) podemos ver como una caja esta anidada dentro de otra. Es hora de colocar los controles de nuestra aplicación. Vamos a colocar una etiqueta en la primera caja a la izquierda, una entrada de texto en la segunda (arriba a la derecha), un botón de incremento en la caja central y para terminar un botón normal en el inferior. El resultado debería ser algo parecido a esto:

Antes de aprender como funciona el empaquetado de los controles (tamaño, que se expandan etc) vamos a cambiar los nombres de los controles a algo que nos sea más significativo (en este caso solo vamos a traducir sus nombres). Para ello elegimos el control que queremos modificar (bien en la ventana donde esta o en el árbol) y la ventana de propiedades, pestaña widget, vamos cambiado los nombres. También cambiaremos el texto que muestra la etiqueta y el texto del botón. Una vez hecho esto la ventana debería tener un aspecto similar al la captura de debajo de este párrafo

Antes de seguir con las señales vamos a guardar nuestro proyecto glade. De la ventana de opciones de guardar el proyecto lo que nos interesa es el nombre del archivo glade, ya que es lo que luego necesitaremos. Vamos a hacer un poco de trampa y dar un salto ene l manual :) Una vez guardado nuestro glade vamos a generar una prueba de lo que luego será la aplicación python. ~/prueba_glade $ simple-glade-codegen.py prueba_glade.glade prueba_glade.py ~/prueba_glade $ls prueba_glade.* -l -rw-r--r-- 1 patataman patataman 4462 2005-03-10 13:49 prueba_glade.glade -rw-r--r-- 1 patataman patataman 285 2005-03-10 13:49 prueba_glade.gladep -rwxr-xr-x 1 patataman patataman 1017 2005-03-10 18:48 prueba_glade.py -rwxr-xr-x 1 patataman patataman 1017 2005-03-10 18:48 prueba_glade.py.orig Vemos, además de otros ficheros que luego explicaremos, el fichero prueba_glade.py. Si lo lanzamos con por ejemplo python prueba_glade.py veremos que se lanza nuestra ventana. Podemos escribir o cambiar el número del incremental, pero enseguida vemos que no hace nada nuestra aplicación. De hecho si intentamos cerrarla vemos que en la terminal sigue el proceso activo. Para lograr que nuestra ventana responda a nuestras acciones tenemos que usar las señales de los controles GTK+.

Señales Si queremos que cuando ocurra un evento en la gui (se pulse un botón, se edite un texto, etc) nuestro código python haga algo necesitamos usar señales. Lo primero sera en glade adjuntar las señales deseadas al control adecuado. Por ejemplo, elegimos el control botón y en la ventana de propiedades del control (widget) vamos a la pestaña señales. Una vez en ella hacemos click en los puntos suspensivos (...) a la derecha del campo señal para elegir el tipo de señal. Nos aparecerá entonces una larga lista de señales soportadas por ese control. Primero tendremos las señales especificas de ese control (GtkButton en este caso), luego las señales del contenedor del control y por último las genéricas a todos los controles GTK+. En este caso elegimos la señal clicked, que nos mandara una señal cada vez que el botón sea pulsado. Le damos a aceptar y si no queremos cambiar el nombre de la señal (on_boton1_clicked) le damos a añadir. Tendremos entonces la primera señal de nuestro programa.

Guardamos nuestro proyecto glade y vamos una vez mas a dar un salto en el manual. Volvemos a abrir una consola en la carpeta donde tengamos el fichero glade y volvemos a lanzar el simple-glade-codegen que nos regenerara el script python: $ simple-glade-codegen.py prueba_glade.glade prueba_glade.py Si lanzamos la aplicación (python prueba_glade.py) y hacemos click en el botón veremos que en la terminal nos aparece un mensaje. Estamos listos ya para ver con mas detalle como se genera el esqueleto en python de nuestra aplicación. Paso 2: Crear el esqueleto de la aplicación python (simple-glade-codegen.py) Podríamos directamente usando pygtk cargar el fichero glade e importar los widgets que queremos usar. Afortunadamente Sandino "tigrux" Flores como se sentía vago (una de las cualidades de los hackers, que odian repetir la misma tarea) creó un guión en python que nos creará un esqueleto de aplicación python que no solo nos cargará el fichero glade, sino que además creará los esqueletos de las funciones asociadas a las señales. Nos lo podemos bajar desde aquí: http://etxea.net/docu/simple-glade-codegen.py.de esta manera al ejecutarla tendremos algo parecido a esto: #!/usr/bin/env python # -*- coding: UTF8 -*- # Python module prueba_glade.py # Autogenerated from prueba_glade.glade # Generated on Fri Mar 11 20:58:46 2005 # Warning: Do not delete or modify comments related to context # They are required to keep user's code import os, gtk from SimpleGladeApp import SimpleGladeApp glade_dir = "" # Put your modules and data here # From here through main() codegen inserts/updates a class for # every top-level widget in the.glade file. class Ventana1(SimpleGladeApp): def init (self, glade_path="prueba_glade.glade", root="ventana1", domain=none): glade_path = os.path.join(glade_dir, glade_path) SimpleGladeApp. init (self, glade_path, root, domain) def new(self): #context Ventana1.new { print "A new Ventana1 has been created" #context Ventana1.new } #context Ventana1 custom methods { #--- Write your own methods here ---#

#context Ventana1 custom methods } def on_boton1_clicked(self, widget, *args): #context Ventana1.on_boton1_clicked { print "on_boton1_clicked called with self.%s" % widget.get_name() #context Ventana1.on_boton1_clicked } def main(): ventana1 = Ventana1() ventana1.run() if name == " main ": main() Vemos que es muy sencillo. Importa distintos módulos, uno de los cuales SimpleGladeApp.py nos creará el mismo en el directorio donde estemos. Luego simplemente define una clase con el nombre de nuestra ventana y que es heredera de SimpleGladeApp y le añade las funciones asociadas a las señales que hayamos definido (con un útil print dentro de ellas para que sin editar el código podamos comprobar que la señal actúa como queremos). Además de un archivo con el mismo nombre que nuestro.glade pero con extensión.py también vemos otros ficheros. Ya hemos hablado de SimpleGladeApp.py, que es donde se carga el glade y se asocian las funciones y las señales. Vemos también un fichero. orig. Es importante mantenerlo, ya que este fichero lo utilizará para que cada vez que lancemos simple-glade-codegen.py (por ejemplo porque hemos cambiado el fichero glade) mantener el código que hayamos introducido a mano.

Paso 3: Programar los algoritmos de la aplicación en python Bien, ya tenemos la interfaz y tenemos también las señales que harán que nuestros algoritmos actúen. Es hora de programar un poco de python. Vamos a hacer en 8 lineas (python mola :) un pequeño programa que se conecte a un servidor web y nos vuelque el resultado por consola: servidor=self.wtree.get_widget("entry1").get_text() puerto=int(self.wtree.get_widget("spinbutton1").get_value()) if host=="": return import urllib page=urllib.urlopen("http://"+servidor+":"+str(puerto)+"/") data=page.read() print data Paso 4: Queremos ampliar el programa. Como estamos haciendo una aplicación gráfica no tiene mucho sentido que la salida la obtengamos a través de una terminal. Por ello vamos a añadir un control nuevo que nos muestre la salida de la petición HTML. Lo primero será hacerle un hueco en la cajonera vertical. Para ello elegimos el control en el árbol de widgets y en la ventana de propiedades cambiamos su tamaño de 3 a 4. Con esto lograremos un nuevo cajón vacío. En este cajón vamos a añadir un control de Vista del Texto. De paso le cambiamos el nombre a vistatexto por ejemplo.

Lo siguiente es guardar el proyecto glade y volver a lanzar a nuestro buen amigo simpleglade-codegen.py (aunque en este caso no es necesario). Una vez actualizado el glade vamos a cambiar la manera en la que representamos los datos en nuestro guión python. Si recordamos teniamos un simple print data, que vamos a cambiar por lo siguiente: mi_buffer=gtk.textbuffer() mi_buffer.insert_at_cursor(data) self.vistatexto.set_buffer(mi_buffer) Hemos tenido que hacer uso de un buffer GTK de tipo texto para poder pasarle a través de el el texto al control vistatexto. Con todo esto la función on_boton1_clicked será tal que así: print "on_boton1_clicked called with self.%s" % widget.get_name() host=self.entrada.get_text() print "En etiqueta tenemo: %s" % host port=int(self.incremental.get_value()) if host=="" : print "no hostname!" return import urllib page=urllib.urlopen("http://"+host+":"+str(port)+"/") data=page.read() print data mi_buffer=gtk.textbuffer() mi_buffer.insert_at_cursor(data) self.vistatexto.set_buffer(mi_buffer) #context Ventana1.on_boton1_clicked } El resultado debería ser algo tal que así: La utilidad de esta aplicación es mas bien poca :) pero nos ha servido para ver lo rápido y sencillo que es desarrollar sobre python+glade. Suerte y que la fuente este con vosotros :).

Bibliografía Tutorial esencial. Es del creador de simple-glade-codegen.py: http://primates.ximian.com/~sandino/python-glade/ Documento en el cual se basa el ejemplo de este tutorial: http://www.linuxjournal.com/article/6586 Que es python? http://users.servicios.retecal.es/tjavier/python/que_es_python.html Web de pygtk, con la referencia a todos los widgets http://pygtk.org/ http://www.pygtk.org/pygtk2reference/index.html

Licencia Reconocimiento-NoComercial-CompartirIgual 2.1 España Usted es libre de: copiar, distribuir y comunicar públicamente la obra hacer obras derivadas Bajo las condiciones siguientes: Reconocimiento. Debe reconocer y citar al autor original. No comercial. No puede utilizar esta obra para fines comerciales. Compartir bajo la misma licencia. Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Esto es un resumen legible por humanos del texto legal (la licencia completa) disponible en los idiomas siguientes: Catalán Castellano