PyQT - Desarrollando aplicaciones de escritorio (ElCoDiGoK).pdf

18

Transcript of PyQT - Desarrollando aplicaciones de escritorio (ElCoDiGoK).pdf

Sobre este documento...

Los contenidos de este documento están bajo la licencia Creative Commons

Esta versión impresa se creo el 10 de Julio de 2008 y todavía esta incompleta, si deseas descargar la última versión puede informarte en http://www.elcodigok.com.ar

Si deseas aportar sugerencias, comentarios, críticas o informar la presencia de errores puede hacerlo a [email protected]

Para más información les recomiendo que visiten mi blog El CoDiGo K http://www.elcodigok.com.ar y LaREPAWEB http://www.larepaweb.com.ar

PyQT Desarrollando Aplicaciones de Escritorio

Esta pequeña guía es el resultado de una recopilación y de horas de trabajo, motivado desde hace tiempo, debido a que muchos programadores quieren comenzar a programar con estas dos grandiosas herramientas y muchas veces no sabe como dar los primeros pasos sin quedarse en el intento.

Para ello esta guía intenta ser un documento de referencia y de motivación para comenzar a trabajar y realizar interfaces de usuarios muy simples.

INTRODUCCIÓN

¿Qué es Python?

Python es un Lenguaje de Programación creado por Guido van Rossum en el año 1990, este personaje ya se los había presentado anteriormente en nuestra sección de Programadores.

Es un lenguajes muy comparado con TCL, Perl, Scheme, Java y Ruby. En la actualidad Python se desarrolla como un proyecto de código abierto, administrado por la Python Software Foundation. La última versión estable del lenguaje es actualmente la 2.5.1 (18 de abril de 2007).

Python permite dividir el programa en módulos reutilizables desde otros programas Python. Viene con una gran colección de módulos estándar que se pueden utilizar como base de los programas (o como ejemplos para empezar a aprender Python). También hay módulos incluidos que proporcionan E/S de ficheros, llamadas al sistema, sockets y hasta interfaces a GUI (interfaz gráfica con el usuario) como Tk, GTK, Qt entre otros.

Python es un lenguaje interpretado, lo que ahorra un tiempo considerable en el desarrollo del programa, pues no es necesario compilar ni enlazar. El intérprete se puede utilizar de modo interactivo, lo que facilita experimentar con características del lenguaje, escribir programas desechables o probar funciones durante el desarrollo del programa. También es una calculadora muy útil.

Características de Python

En primer lugar les comento que Python es un Lenguaje de Programación multiparadigma, lo cual significa que no trata de forzar a los programadores a adoptar un determinado modelo de paradigma o estilo sino que permite varios. Entre ella tenemos POO (Programación

Orientada a Objetos), Programación Estructurada, Programación Funcional y la Programación orientada a Aspectos.

Python utiliza tipado dinámico de datos (puede tomar una variable diferentes tipos de datos durante la ejecución del programa) y referencia counting para el manejo de memoria. Otra característica importante de Python es la resolución dinámica de nombres, lo que enlaza un método y un nombre de variable durante la ejecución del programa.

Otro objetivo del diseño del lenguaje era la facilidad de extensión. Nuevos módulos se pueden escribir fácilmente en C o C++.

Python puede utilizarse como un lenguaje de extensión para módulos y aplicaciones que necesitan de una interfaz programable. Aunque el diseño de Python es de alguna manera hostil a la programación funcional tradicional del Lisp, existen bastantes analogías entre Python y los lenguajes minimalistas de la familia del Lisp como puede ser Scheme.

Las librerías QT

QT es una biblioteca multiplataforma, creadas para desarrollar interfaces gráficas de usuarios. Fue creada por la compañía noruega Trolltech (una compañía de software fundada en el año 1994).

Seguramente reconocerás a QT ya que el mismo utiliza el entorno gráfico KDE (K Desktop Environment) un entorno gráfico para los sistemas operativos GNU/Linux o FreeBSD entre otros.

Es desarrollado con el lenguaje de programación C++ de forma nativa pero existen módulos para otros lenguajes de programación como ser C, Python (PyQT), Java (QT Jambi), Perl (PerlQT), Gambas (gb.qt), Ruby (QTRuby), PHP (PHP-QT), Mono (Qyoto), entre los más reconocidos.

Es un librería totalmente Orientada a Objetos, es por ello que las API (Application Programming Interface) cuenta con diferentes métodos, soporta el uso de diferentes motores de Bases de Datos y el uso de archivos XML, además de otras estructuras de datos tradicionales.

Estas librerías de desarrollo se encuentran disponibles para las siguientes plataformas:

● X11 - Para X Windows System (GNU/Linux, Unix, BSD).

● Mac - Para los sistemas Mac OS X.

● Windows - Para las diferentes versiones del Sistema Operativo Windows.

● PDA - Para los dispositivos empotrados.

De este modo podemos ver que en diferentes plataformas es totalmente compatibles y listo para migrar.

MI PRIMER PROGRAMAREALIZADO CON

PyQT

Basta de palabras y vamos a comenzar a programar y conocer lo simple que puede llegar a ser esto.

En principio vamos a necesitar algunas aplicaciones instaladas, como ser:

● El IDE de programación KDevelop, en él encontraremos la herramienta KDevelopDesigner

● Python, el lenguaje interpretado a utilizar.● Python-qt-dev● Python-qt3● pyqt-tools

Una ves que comprobamos que tenemos instalado todas estas herramientas podemos decir que estamos listos para comenzar a desarrollar.

Lo primero que vamos a realizar comenzar a utilizar KDevelopDesigner, para poder realizar nuestros formularios, les comento que vamos a realizar el clásico ejemplo “Hola Mundo!”.

Para aquellas personas que no conocen de que se trata KDevelopDesigner les comento que se trata de una herramienta que nos permite realizar

interfaces de usuarios, formularios, Widget, etc, desarrollado para las librerías QT.

KDevelopDesigner tiene una particularidad que realmente es muy interesante y es algo que debemos comprender bien, les comentaba que a través de esta herramienta vamos a poder desarrollar nuestros formularios, los mismos se van a almacenar como archivos de extensión .ui, estos archivos poseen un contenido al estilo XML pero que no corresponde para un lenguaje de programación en particular.

Esto quiere decir que nosotros debemos transformar este archivo .ui a un archivo para nuestro lenguaje de programación, entonces estos formularios creados podemos utilizar tanto para C, C++, Python, Ruby, etc. Más adelante vamos a ver como realizar esta operación.

Volvamos un poco a KDevelopDesigner vamos a crear un nuevo archivo y en particular vamos a escoger un archivo Widget

Una ves que seleccionamos Widget vamos a poder utilizar por completo esta herramienta. Podemos observar que nos aparece un formulario en la parte central de IDE, en la parte izquierda nos encontramos con los diferentes Widget que podemos agregar al formulario como ser, Linea de Texto, Botones, Listas, ComboBox, Labels, Radios, Check, Contenedores, etc.

Entonces podemos apreciar que a nuestros formularios vamos a poder agregarle una gran cantidad de Widget para realizar diferentes operaciones.

Como dijimos anteriormente en la parte central podemos apreciar el formulario que vamos desarrollando y agregándole diferentes cosas. Por último podemos observar a la derecha que encontramos un explorador de proyectos, donde podemos ver todos los proyectos que tenemos abiertos, un explorador de Objetos en donde podemos conocer rápidamente todos los objetos que contiene el formulario y por último un editor de propiedades de cada objeto, en donde podemos configurar y editar cada una de las propiedades que contiene cada uno de los objetos, más adelante vamos a ver en detalle estas cosas.

La siguiente imagen muestra todo lo descripto anteriormente.

Rápidamente vamos a comenzar a utilizar algunas propiedades de los formulario, para ello seleccionamos el formulario, y nos dirigimos hasta donde se encuentras las propiedades y nos dirigimos a caption y modificamos la leyenda Form1 por algo que deseamos cambiar.

En el ejemplo que estamos desarrollando vemos como lo modificamos para que figure como titulo otra leyenda. Otra propiedad que es importante para modificar es la propiedad name y que nos indica el nombre del formulario, para el ejemplo les recomendaría que lo llamen Formulario.

Ahora comencemos a agregar algunos objetos a nuestro formulario, para ello lo único que debemos realizar es identificar el objeto que queremos agregar, seleccionarlo y luego colocarlo en el formulario, así de simple como vemos en el ejemplo

De la misma manera vamos a ir agregando algunos botones y otros agregados, siempre les recomendaría que modifiquen a todos los objeto la propiedad name, ya que es muy importante y lo vamos a ver en la programación y interacción. Colocar nombre representativos por ejemplo a la Línea de Texto agregado yo le coloque LineaEdicion.

Ahora agregamos dos botones, uno con el name BotonHola y

podemos modificar la propiedad text, que para el caso de los botones especifica la leyenda que se muestra en cada uno de los mismo.

Y agregamos el clásico botón salir, donde nuevamente le cambiamos la propiedad name por BotonSalir y la propiedad text por una leyenda como ser Salir.

De este modo podemos ver que nos queda el formulario terminada y armado.

Ahora podemos ir agregando algunas funcionalidades y correcciones a este formulario, por ejemplo podemos modificar el orden del foco de cada uno de los objetos como en la siguiente imagen.

Ahora vamos a aplicar y relacionar algunas funciones a los botones relacionados, por ejemplo vamos a realizar una conexión, para ello nos dirigimos hasta el menú Edición y nos dirigimos a la opción Connections.

En él vamos a podes seleccionar cual es el objeto que emite el mensaje, la señal con la cual se produce el evento, el objeto receptor de la señal y por último la función que se va a desencadenar.

En el ejemplo vemos que la señal la emite el BotonSalir, a través de un clicked(), lo recibe el objeto formulario, y desencadena la función close().

Así es como entendemos este mecanismo, pero muchas veces podemos definir nuevas funciones o Slots propias.

Para realizar esto nos dirigimos nuevamente al menú Edición, Slots.

Alli se listarán todas las funciones, para crear una nueva vamos a New Function, y ahora creamos por ejemplo la función

Saludar() con todos los valores por defectos, por ejemplo Specifier virtual, Access Public y Type slot.

Ahora debemos conectar nuestro BotonHola para que active la función Saludar(), esto lo realizamos de la misma manera que el procedimiento anterior, nos dirigimos hasta el menú Edición, Connections, hay seleccionamos cual es el objeto de activación, bajo que evento, cual es el objeto que receptor y la función desencadenante, en este caso y como lo muestra el siguiente gráfico la función Saludar()

Esto como verán nos va a ser más que útil para personalizar nuestras funciones y agregarle todas las funcionalidades.

Hasta aquí podemos decir que ya tenemos completado el diseño de nuestro formulario que vamos a utilizar, con conexiones entre algunos

objetos que desencadenan y activan algunas funciones a realizar.

Ahora como les contaba anteriormente este formulario editado por KdevelopDesigner es general, y no específico para cada lenguaje de programación.

Entonces para transformar el archivo .ui en una biblioteca de clases de Python nos va a ayudar la herramienta pyuic, un traductor que nos va a permitir llevar a cabo esta tarea.

Como pueden observar en el anterior ejemplo realmente es más que simple, yo les puedo hacer una recomendación, simplemente que al archivo que van a convertir pueden nombrarlo de la misma forma, no por alguna restricción en particular sino más bien por una cuestión que en proyectos grandes posiblemente sea mas complicado reconocerlo por la cantidad de archivos y perdamos tiempo.

Si tenemos la posibilidad de ver el código fuente del nuevo archivo transformado, podemos observar que ahora esta escrito como clases dentro de Python como en la siguiente ilustración.

Ahora les voy a hacer otra recomendación, al momento de programar, es bueno que lo

podamos hacer bajo algún editor o IDE que nos encontremos cómodos de utilizar. Si bien Python cuenta con un centenar de IDEs, es posible crear nuestros escripts desde cualquier editor de texto plano, Vim, Emacs, Nano, Kate, Gedit, KDevelop, etc. A mi particularmente me gusta trabajar siempre con dos editores con el Kate y con el vim, ustedes escojan los que les gusten.

Lo que vamos a hacer es ahora crear un nuevo archivo con extensión .py que lo que va a realizar es cargar la biblioteca de clases y hacer que se ejecute el formulario creado.

Para ello creamos un nuevo archivo en nuestro editor escogido y en este ejemplo lo llamaremos holamundo.py como en la siguiente ilustración

Y ahora procedemos a codificar lo que en el gráfico se encuentra documentado.

Como podemos apreciar el código escrito no presenta tanta dificultad, primero cargamos los módulos y librerías qt, sys y más adelante importamos la clases que se encuentra en el archivo formulario.

Definimos la función main(), instanciamos algunos objetos, convocamos al formulario, lo hacemos aparecer y por último controlamos el programa.

Si bien con esta explicación no quiero enseñar a programar en Python pero si hacer referencia a la integración que podemos llegar a lograr con las librerías QT.

Para poder ejecutar esta aplicación lo único que debemos hacer es acercarnos hasta una terminal y utilizar el intérprete de Python.

De esta manera podemos observar que ya tenemos nuestro formulario controlado por Python.

Ahora vamos a hacer uso nuevamente de la programación orientada a objeto y acá va otra recomendación para que tengan en cuenta. Al tener un archivo dependiente del archivo .ui sería una buena opción no operar con el mismo ya que si comenzamos a modificar el archivo pero resulta que después a nuestro formulario debemos agregarle un botón más, utilizamos el archivo .ui, editamos con KdevelopDesigner, lo agregamos, modificamos algunas propiedades, y ahora transformamos nuevamente el archivo .ui a .py con la herramienta pyuic, todas las modificaciones que teníamos serán borradas, para evitar esto vamos a hacer uso de la herencia.

Entonces en el nuevo archivo creado vamos a hacer una clase que herede de la que contiene todos los métodos y propiedades del formulario.

De esta forma vemos como localmente estamos modificando el método saludar, personalizándolo y desde ya va a ser totalmente independiente del original, y todo esto gracias a la Herencia y Polimorfismo del paradigma orientado a Objetos.

Para ello como verán es recomendable tener algo de conocimientos de teoría de programación orientada a objetos y una base del lenguaje de programación Python. Entonces si ejecutamos la aplicación y pulsamos sobre el botón Hola Mundo!, vamos a ver que aparece en la Línea de Texto del formulario un mensaje

Con lo cual podemos decir que esta pequeña aplicación esta siendo ejecutada correctamente y utilizando las librerías QT.

Por último demos un repaso de los archivo que tenemos creado.

Tenemos tres archivo con el mismo nombre, el primero es el que transformamos con el traductor pyuic, el segundo el archivo .pyc es un archivo especial de Python precompilado por tenerlo como un modulo y se crea automáticamente y por último el archivo .ui que es el archivo que se genera con KDevelopDesigner. Al final nos encontramos con el archivo integrador llamado holamundo.py, en done convocamos a través de módulos a los anteriores y heredamos todos sus métodos para trabajarlos localmente.

Por último y para terminar solo nos queda otorgarle permiso de ejecución al archivo creado de la siguiente manera.

Y ya nos va a quedar un archivo completo y funcional.

El desafío de acá en adelantes es “jugar” un poco más con los Widget y los objetos que encontramos en KDevelopDesigner y que podemos agregar en nuestros formularios, para que de esa manera podamos conocer como se utilizan en Python, implementar sus métodos, propiedades, etc.