Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PyQT - Desarrollando Aplicaciones de Escritorio (ElCoDiGoK)
PyQT - Desarrollando Aplicaciones de Escritorio (ElCoDiGoK)
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
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'
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
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'