Está en la página 1de 18

Sobre este documento...

Los contenidos de este documento estn bajo la licencia Creative Commons Esta versin impresa se creo el 10 de Julio de 2008 y todava esta incompleta, si deseas descar ar la !ltima versin puede in"ormarte en #ttp$%%&&&'elcodi o('com'ar )i deseas aportar su erencias, comentarios, crticas o in"ormar la presencia de errores puede #acerlo a dany*+elcodi o('com'ar ,ara ms in"ormacin les recomiendo -ue visiten mi blo El Co.i/o 0 #ttp$%%&&&'elcodi o('com'ar y La1E,23E4 #ttp$%%&&&'larepa&eb'com'ar

PyQT Desarrollando Aplicaciones de Escritorio


Esta pe-ue5a ua es el resultado de una recopilacin y de #oras de trabajo, motivado desde #ace tiempo, debido a -ue muc#os pro ramadores -uieren comen6ar a pro ramar con estas dos randiosas #erramientas y muc#as veces no sabe como dar los primeros pasos sin -uedarse en el intento' ,ara ello esta ua intenta ser un documento de re"erencia y de motivacin para comen6ar a trabajar y reali6ar inter"aces de usuarios muy simples'

INTRODUCCI N

!Qu" es Pyt#on$
,yt#on es un Len uaje de ,ro ramacin creado por /uido van 1ossum en el a5o 1770, este personaje ya se los #aba presentado anteriormente en nuestra seccin de ,ro ramadores' Es un len uajes muy comparado con TC%, Perl, Sc#eme, &a'a y Ruby' En la actualidad ,yt#on se desarrolla como un proyecto de cdi o abierto, administrado por la Python Software Foundation' La !ltima versin estable del len uaje es actualmente la 2'8'1 918 de abril de 2007:' ,yt#on permite dividir el pro rama en mdulos reutili6ables desde otros pro ramas ,yt#on' ;iene con una ran coleccin de mdulos estndar -ue se pueden utili6ar como base de los pro ramas 9o como ejemplos para empe6ar a aprender ,yt#on:' <ambi=n #ay mdulos incluidos -ue proporcionan E%) de "ic#eros, llamadas al sistema, soc(ets y #asta inter"aces a />? 9inter"a6 r"ica con el usuario: como <(, /<0, @t entre otros' ,yt#on es un len uaje interpretado, lo -ue a#orra un tiempo considerable en el desarrollo del pro rama, pues no es necesario compilar ni enla6ar' El int=rprete se puede utili6ar de modo interactivo, lo -ue "acilita e*perimentar con caractersticas del len uaje, escribir pro ramas desec#ables o probar "unciones durante el desarrollo del pro rama' <ambi=n es una calculadora muy !til'

Caracter(sticas de Pyt#on
En primer lu ar les comento -ue ,yt#on es un Len uaje de ,ro ramacin multiparadi ma, lo cual si ni"ica -ue no trata de "or6ar a los pro ramadores a adoptar un determinado modelo de paradi ma o estilo sino -ue permite varios' Entre ella tenemos POO 9Pro ramacin

Orientada a Objetos:, ,ro ramacin Estructurada, ,ro ramacin Auncional y la ,ro ramacin orientada a 2spectos' ,yt#on utili6a tipado dinmico de datos 9puede tomar una variable di"erentes tipos de datos durante la ejecucin del pro rama: y re"erencia countin para el manejo de memoria' Btra caracterstica importante de ,yt#on es la resolucin dinmica de nombres, lo -ue enla6a un m=todo y un nombre de variable durante la ejecucin del pro rama' Btro objetivo del dise5o del len uaje era la "acilidad de e*tensin' Cuevos mdulos se pueden escribir "cilmente en C o C))' ,yt#on puede utili6arse como un len uaje de e*tensin para mdulos y aplicaciones -ue necesitan de una inter"a6 pro ramable' 2un-ue el dise5o de ,yt#on es de al una manera #ostil a la pro ramacin "uncional tradicional del Lisp, e*isten bastantes analo as entre ,yt#on y los len uajes minimalistas de la "amilia del Lisp como puede ser )c#eme'

%as librer(as QT
QT es una biblioteca multiplata"orma, creadas para desarrollar inter"aces r"icas de usuarios' Aue creada por la compa5a norue a Trolltec# 9una compaa de software fundada en el ao 199 :' )e uramente reconocers a @< ya -ue el mismo utili6a el entorno r"ico *DE 9* Des(top Environment: un entorno r"ico para los sistemas operativos /C>%Linu* o Aree4). entre otros' Es desarrollado con el len uaje de pro ramacin C)) de "orma nativa pero e*isten mdulos para otros len uajes de pro ramacin como ser C, Pyt#on 9Py!":, &a'a 9!" #ambi:, Perl 9Perl!":, +ambas 9$b%&t:, Ruby 9!"'uby:, P,P 9P(P)!":, -ono 9!yoto:, entre los ms reconocidos' Es un librera totalmente Brientada a Bbjetos, es por ello -ue las API 9Application Pro$rammin$ Interface: cuenta con di"erentes m=todos, soporta el uso de di"erentes motores de 4ases de .atos y el uso de arc#ivos DEL, adems de otras estructuras de datos tradicionales' Estas libreras de desarrollo se encuentran disponibles para las si uientes plata"ormas$

D11 F ,ara D 3indo&s )ystem 9/C>%Linu*, >ni*, 4).:' Eac F ,ara los sistemas Eac B) D'

3indo&s F ,ara las di"erentes versiones del )istema Bperativo 3indo&s' ,.2 F ,ara los dispositivos empotrados'

.e este modo podemos ver -ue en di"erentes plata"ormas es totalmente compatibles y listo para mi rar'

-I PRI-ER PRO+RA-A REA%I.ADO CON PyQT

4asta de palabras y vamos a comen6ar a pro ramar y conocer lo simple -ue puede lle ar a ser esto' En principio vamos a necesitar al unas aplicaciones instaladas, como ser$

El ?.E de pro ramacin 0.evelop, en =l encontraremos la #erramienta 0.evelop.esi ner ,yt#on, el len uaje interpretado a utili6ar' ,yt#onF-tFdev ,yt#onF-tG py-tFtools

>na ves -ue comprobamos -ue tenemos instalado todas estas #erramientas podemos decir -ue estamos listos para comen6ar a desarrollar' Lo primero -ue vamos a reali6ar comen6ar a utili6ar 0.evelop.esi ner, para poder reali6ar nuestros "ormularios, les comento -ue vamos a reali6ar el clsico ejemplo HIola EundoJK' ,ara a-uellas personas -ue no conocen de -ue se trata 0.evelop.esi ner les comento -ue se trata de una #erramienta -ue nos permite reali6ar

inter"aces de usuarios, "ormularios, 3id et, etc, desarrollado para las libreras @<' 0.evelop.esi ner tiene una particularidad -ue realmente es muy interesante y es al o -ue debemos comprender bien, les comentaba -ue a trav=s de esta #erramienta vamos a poder desarrollar nuestros "ormularios, los mismos se van a almacenar como arc#ivos de e*tensin 'ui, estos arc#ivos poseen un contenido al estilo DEL pero -ue no corresponde para un len uaje de pro ramacin en particular' Esto -uiere decir -ue nosotros debemos trans"ormar este arc#ivo 'ui a un arc#ivo para nuestro len uaje de pro ramacin, entonces estos "ormularios creados podemos utili6ar tanto para C, C)), Pyt#on, Ruby, etc' Es adelante vamos a ver como reali6ar esta operacin' ;olvamos un poco a 0.evelop.esi ner vamos a crear un nuevo arc#ivo y en particular vamos a esco er un arc#ivo 3id et

>na ves -ue seleccionamos 3id et vamos a poder utili6ar por completo esta #erramienta' ,odemos observar -ue nos aparece un "ormulario en la parte central de ?.E, en la parte i6-uierda nos encontramos con los di"erentes 3id et -ue podemos a re ar al "ormulario como ser, %inea de Te/to, 0otones, %istas, Combo0o/, %abels, Radios, C#ec1, Contenedores, etc' Entonces podemos apreciar -ue a nuestros "ormularios vamos a poder a re arle una ran cantidad de 3id et para reali6ar di"erentes operaciones'

Como dijimos anteriormente en la parte central podemos apreciar el "ormulario -ue vamos desarrollando y a re ndole di"erentes cosas' ,or !ltimo podemos observar a la derec#a -ue encontramos un e*plorador de proyectos, donde podemos ver todos los proyectos -ue tenemos abiertos, un e*plorador de Bbjetos en donde podemos conocer rpidamente todos los objetos -ue contiene el "ormulario y por !ltimo un editor de propiedades de cada objeto, en donde podemos con"i urar y editar cada una de las propiedades -ue contiene cada uno de los objetos, ms adelante vamos a ver en detalle estas cosas' La si uiente ima en muestra todo lo descripto anteriormente'

1pidamente vamos a comen6ar a utili6ar al unas propiedades de los "ormulario, para ello seleccionamos el "ormulario, y nos diri imos #asta donde se encuentras las propiedades y nos diri imos a caption y modi"icamos la leyenda 2orm3 por al o -ue deseamos cambiar'

En el ejemplo -ue estamos desarrollando vemos como lo modi"icamos para -ue "i ure como titulo otra leyenda' Btra propiedad -ue es importante para modi"icar es la propiedad name y -ue nos indica el nombre del "ormulario, para el ejemplo les recomendara -ue lo llamen 2ormulario' 2#ora comencemos a a re ar al unos objetos a nuestro "ormulario, para ello lo !nico -ue debemos reali6ar es identi"icar el objeto -ue -ueremos a re ar, seleccionarlo y lue o colocarlo en el "ormulario, as de simple como vemos en el ejemplo

.e la misma manera vamos a ir a re ando al unos botones y otros a re ados, siempre les recomendara -ue modi"i-uen a todos los objeto la propiedad name, ya -ue es muy importante y lo vamos a ver en la pro ramacin y interaccin' Colocar nombre representativos por ejemplo a la Lnea de <e*to a re ado yo le colo-ue %ineaEdicion' 2#ora a re amos dos botones, uno con el name 0oton,ola y

podemos modi"icar la propiedad te/t, -ue para el caso de los botones especi"ica la leyenda -ue se muestra en cada uno de los mismo'

L a re amos el clsico botn salir, donde nuevamente le cambiamos la propiedad name por 0otonSalir y la propiedad te/t por una leyenda como ser Salir' .e este modo podemos ver -ue nos -ueda el "ormulario terminada y armado'

2#ora podemos ir a re ando al unas "uncionalidades y correcciones a este "ormulario, por ejemplo podemos modi"icar el orden del "oco de cada uno de los objetos como en la si uiente ima en'

2#ora vamos a aplicar y relacionar al unas "unciones a los botones relacionados, por ejemplo vamos a reali6ar una cone*in, para ello nos diri imos #asta el men! *dici+n y nos diri imos a la opcin ,onnections' En =l vamos a podes seleccionar cual es el objeto -ue emite el mensaje, la se5al con la cual se produce el evento, el objeto receptor de la se5al y por !ltimo la "uncin -ue se va a desencadenar'

En el ejemplo vemos -ue la se5al la emite el 0otonSalir, a trav=s de un clic1ed45, lo recibe el objeto 6ormulario, y desencadena la "uncin close45. 2s es como entendemos este mecanismo, pero muc#as veces podemos de"inir nuevas "unciones o )lots propias' ,ara reali6ar esto nos diri imos nuevamente al men! Edicin, )lots' 2lli se listarn todas las "unciones, para crear una nueva vamos a -ew Function, y a#ora creamos por ejemplo la "uncin

Saludar45 con todos los valores por de"ectos, por ejemplo Speci6ier 'irtual, Access Public y Type slot'

2#ora debemos conectar nuestro 0oton,ola para -ue active la "uncin Saludar45, esto lo reali6amos de la misma manera -ue el procedimiento anterior, nos diri imos #asta el men! *dici+n, ,onnections, #ay seleccionamos cual es el objeto de activacin, bajo -ue evento, cual es el objeto -ue receptor y la "uncin desencadenante, en este caso y como lo muestra el si uiente r"ico la "uncin Saludar45 Esto como vern nos va a ser ms -ue !til para personali6ar nuestras "unciones y a re arle todas las "uncionalidades'

Iasta a-u podemos decir -ue ya tenemos completado el dise5o de nuestro "ormulario -ue vamos a utili6ar, con cone*iones entre al unos

objetos -ue desencadenan y activan al unas "unciones a reali6ar' 2#ora como les contaba anteriormente este "ormulario editado por 0develop.esi ner es eneral, y no espec"ico para cada len uaje de pro ramacin' Entonces para trans"ormar el arc#ivo 'ui en una biblioteca de clases de ,yt#on nos va a ayudar la #erramienta pyuic, un traductor -ue nos va a permitir llevar a cabo esta tarea'

Como pueden observar en el anterior ejemplo realmente es ms -ue simple, yo les puedo #acer una recomendacin, simplemente -ue al arc#ivo -ue van a convertir pueden nombrarlo de la misma "orma, no por al una restriccin en particular sino ms bien por una cuestin -ue en proyectos randes posiblemente sea mas complicado reconocerlo por la cantidad de arc#ivos y perdamos tiempo' )i tenemos la posibilidad de ver el cdi o "uente del nuevo arc#ivo trans"ormado, podemos observar -ue a#ora esta escrito como clases dentro de ,yt#on como en la si uiente ilustracin' 2#ora les voy a #acer otra recomendacin, al momento de pro ramar, es bueno -ue lo

podamos #acer bajo al !n editor o ?.E -ue nos encontremos cmodos de utili6ar' )i bien ,yt#on cuenta con un centenar de ?.Es, es posible crear nuestros escripts desde cual-uier editor de te*to plano, 7im, Emacs, Nano, *ate, +edit, *De'elop, etc' 2 mi particularmente me usta trabajar siempre con dos editores con el 0ate y con el vim, ustedes escojan los -ue les usten' Lo -ue vamos a #acer es a#ora crear un nuevo arc#ivo con e*tensin 'py -ue lo -ue va a reali6ar es car ar la biblioteca de clases y #acer -ue se ejecute el "ormulario creado' ,ara ello creamos un nuevo arc#ivo en nuestro editor esco ido y en este ejemplo lo llamaremos #olamundo.py como en la si uiente ilustracin

L a#ora procedemos a codi"icar lo -ue en el documentado'

r"ico se encuentra

Como podemos apreciar el cdi o escrito no presenta tanta di"icultad, primero car amos los mdulos y libreras 8t, sys y ms adelante importamos la clases -ue se encuentra en el arc#ivo 6ormulario' .e"inimos la "uncin main45, instanciamos al unos objetos, convocamos al "ormulario, lo #acemos aparecer y por !ltimo controlamos el pro rama' )i bien con esta e*plicacin no -uiero ense5ar a pro ramar en ,yt#on pero si #acer re"erencia a la inte racin -ue podemos lle ar a lo rar con las libreras @<' ,ara poder ejecutar esta aplicacin lo !nico -ue debemos #acer es acercarnos #asta una terminal y utili6ar el int=rprete de ,yt#on'

.e esta manera podemos observar -ue ya tenemos nuestro "ormulario controlado por ,yt#on' 2#ora vamos a #acer uso nuevamente de la pro ramacin orientada a objeto y ac va otra recomendacin para -ue ten an en cuenta' 2l tener un arc#ivo dependiente del arc#ivo 'ui sera una buena opcin no operar con el mismo ya -ue si comen6amos a modi"icar el arc#ivo pero resulta -ue despu=s a nuestro "ormulario debemos a re arle un botn ms, utili6amos el arc#ivo 'ui, editamos con 0develop.esi ner, lo a re amos, modi"icamos al unas propiedades, y a#ora trans"ormamos nuevamente el arc#ivo 'ui a 'py con la #erramienta pyuic, todas las modi"icaciones -ue tenamos sern borradas, para evitar esto vamos a #acer uso de la #erencia' Entonces en el nuevo arc#ivo creado vamos a #acer una clase -ue #erede de la -ue contiene todos los m=todos y propiedades del "ormulario'

.e esta "orma vemos como localmente estamos modi"icando el m=todo saludar, personali6ndolo y desde ya va a ser totalmente independiente del ori inal, y todo esto racias a la Ierencia y ,olimor"ismo del paradi ma orientado a Bbjetos' ,ara ello como vern es recomendable tener al o de conocimientos de teora de pro ramacin orientada a objetos y una base del len uaje de pro ramacin ,yt#on' Entonces si ejecutamos la aplicacin y pulsamos sobre el botn Iola EundoJ, vamos a ver -ue aparece en la Lnea de <e*to del "ormulario un mensaje

Con lo cual podemos decir -ue esta pe-ue5a aplicacin esta siendo ejecutada correctamente y utili6ando las libreras @<' ,or !ltimo demos un repaso de los arc#ivo -ue tenemos creado'

<enemos tres arc#ivo con el mismo nombre, el primero es el -ue trans"ormamos con el traductor pyuic, el se undo el arc#ivo 'pyc es un arc#ivo especial de ,yt#on precompilado por tenerlo como un modulo y se crea automticamente y por !ltimo el arc#ivo 'ui -ue es el arc#ivo -ue se enera con 0.evelop.esi ner' 2l "inal nos encontramos con el arc#ivo inte rador llamado #olamundo.py, en done convocamos a trav=s de mdulos a los anteriores y #eredamos todos sus m=todos para trabajarlos localmente' ,or !ltimo y para terminar solo nos -ueda otor arle permiso de ejecucin al arc#ivo creado de la si uiente manera'

L ya nos va a -uedar un arc#ivo completo y "uncional' El desa"o de ac en adelantes es Hju arK un poco ms con los 3id et y los objetos -ue encontramos en 0.evelop.esi ner y -ue podemos a re ar en nuestros "ormularios, para -ue de esa manera podamos conocer como se utili6an en ,yt#on, implementar sus m=todos, propiedades, etc'

También podría gustarte