Está en la página 1de 18

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 danyx@elcodigok.com.ar

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 PROGRAMA
REALIZADO 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.