Python y PyQT

download Python y PyQT

of 6

Transcript of Python y PyQT

  • 7/31/2019 Python y PyQT

    1/6

    Introduccin

    Al caer en el mundo de GNU/Linux, todo es nuevo yla primera pregunta que se realiza un programadores : En qu lenguaje y con qu programas puedoprogramar? Muchos respondern que en C o C++ ,pero este es un lenguaje de alto nivel, en el cualalgunas personas pueden perderse. Entonces nospodemos preguntar si habr algo parecido a VisualBasic pero para Linux, y ah es cuando se descubrePython, un lenguaje portado a diferentes sistemasoperativos, muy potente a la vez que sencillo de pro-gramar y que adems suele venir instalado pordefecto en la mayora de distribuciones de Linux.Pero una vez te acercas a Python, ves que se quedaalgo cojo con el tema visual, hasta que descubresque tiene unos bindings para QT, con lo cual ya pue-des hacer aplicaciones KDE, sencillamente y tan soloinstalando el PyQT. PyQT tiene una licencia GPL paraLinux y MacOS. Para Windows tiene otro tipo delicencia comercial debido a que las libreras QT enWindows no son GPL, aunque Trolltech ha comen-

    tado que la versin QT4 ser GPL tambin enWindows(http://www.trolltech.com/newsroom/announcements/00000192.html). Esto convertir launin del lenguaje Python+PyQT en multiplatafor-ma, una ventaja ms a la hora de crear nuestras apli-caciones.

    A todo esto le tenemos que sumar los numero-sos y potentes mdulos de Python y la gran comu-nidad que hay alrededor de este lenguaje.

    En este artculo vamos a desarrollar una aplica-cin completa, basada en Python, PyQT y PySQLite,que sirve para gestionar informacin sobre pelcu-las de vdeo. El cdigo completo de la misma estdisponible en el CD-ROM de Mundo Linux.

    Instalacin

    Vamos a definir los programas que debemos detener instalados para poder programar en PyQT,que sern Python y PyQT. En el CD-ROM queacompaa Mundo Linux se encuentra parte del

    software que se necesita para la instalacin enformato tar.gz, aunque siempre es ms sencilloacudir a los paquetes propios de la distribucin.

    PythonPython: Suele venir preinstalado en la mayora dedistribuciones de Linux, y est disponible en el CD-ROM.

    PyQT se puede descargar de: http://www.river-bankcomputing.co.uk/pyqt/index.php. Los usua-rios de Debian pueden hacer:

    apt-get install python2.4-qt3

    El resto de los usuarios, despus de descompri-mir tienen que hacer (se requiere Qt v3.x):

    python configure.py

    make

    make install

    QtDesignerQtDesigner: Se recomienda buscar el paquete desu distribucin e instalarlo. Los usuarios de Debianpueden hacer:

    apt-get install qt3-designer

    Kdevelop

    Kdevelop, aunque vale cualquier editor de cdigofuente. Kdevelop se puede descargar dehttp://www.kdevelop.org. Los usuarios de Debianpueden hacer:

    apt-get install kdevelop3

    SQLiteSQLite es un motor de bases de datos GPL poten-te, rpido y sencillo de manejar; es el equivalentea una base de datos Access. Viene instalado pordefecto en algunas distribuciones. Para comprobarque lo tenemos instalado ejecutamos el siguientecomando en consola:

    sqlite3 -version

    40MUNDO n81

    Linux http://digital.revistasprofesionales.com

    Programacin

    Python y PyQT

    Escrib iremos una apl icacin

    completa para la gestin de

    pel culas de vdeo, escrita en

    Python. Part iendo desde cero

    l legaremos a disear hasta el

    propio instalador.

    Ral Erquicia Carrin

    Programacin paratodos los pblicosProgramacin paratodos los pblicos

  • 7/31/2019 Python y PyQT

    2/6

    Si la versin es mayor de la 3.1 no necesi-taremos instalarlo y si tenemos Debian tam-poco, puesto que cuando instalemos pysqli-te atraves de apt-get este instalar todas lasdependencias.

    Si necesitamos instalarlo iremos ahttp://www.sqlite.org/ y lo descargaremos(en el CD-ROM se encuentra el fichero conlas fuentes as como un binario precompila-do para Linux). Para instalarlo ejecutaremos:

    ./configure

    make

    make install

    PysqliteAhora necesitaremos pysqlite, que es unmdulo que nos permitir usar en Python labase de datos SQLite. Lo descargamos dehttp://www.pysqlite.org (est disponible en

    el CD-ROM) y para instalarlo ejecutaremos:python setup.py build

    python setup.py install

    Los usuarios de Debian lo pueden instalarcon:

    apt-get install python2.4-pysqlite2

    Primeros pasos

    Una vez que tengamos instalados los pro-gramas necesarios, vamos a crear un ejem-plo de una sencilla aplicacin con una basede datos para mantener ordenada nuestracoleccin de vdeos.

    Diseo del formulario

    Primero disearemos los formularios de laaplicacin con QtDesigner. Lo arrancamosdesde el men de nuestro escritorio o escri-biendo en la consola (vase figura 1):

    designer

    Una vez que haya cargado el QtDesigner,se nos abrir un cuadro de dilogo y en lapestaa New File/Project elegiremos MainWindowy pulsaremos OK (vase figura 2).

    Ahora disearemos el formulario paranuestra aplicacin. En el asistente que apa-rece pulsaremos en Cancelarpara disearlonosotros.

    El formulario se puede disear como cadauno quiera, pero en este artculo propone-mos un modelo.

    Primero, vamos a crear un GroupBoxparaagrupar los controles comunes en la inser-cin y visualizacin de nuestra coleccin devdeos.

    Vamos a la seccin Containersy elegimosGroupBox. Seleccionamos un rea grandepara poder introducir en ella todos los con-troles. Hacemos doble clic sobre esteGroupBoxy le ponemos un ttulo, como porejemplo Coleccion de Vdeos.

    Ahora, dentro de este GroupBoxvamos aintroducir controles de la seccin CommonWidgets. Empezamos con un TextLabel.Hacemos nuevamente doble clic y le pone-mos lo que se muestra en la figura 3.

    Ponemos ahora un LineEdit, pero en este

    control vamos a cambiar otra propiedadbastante importante y esta es el name. Elname nos servir cuando estemos progra-mando las funciones de la aplicacin parareferirnos a los diferentes controles.

    Cambiamos el name y le ponemostxtTitulo, como se muestra en la figura 4.

    Ahora aadimos un Spacer. Este elemen-to nos aade una separacin entre los con-troles en los que est comprendido y es muytil a la hora de redimensionar un formula-rio.

    Ponemos otro TextLabel, con el ttuloFormato.

    Despus insertaremos el componenteComboBox. Este componente es muy tilcuando tenemos que elegir entre variasopciones; es muy intuitivo para el usuario yevita errores que se podran producir si sedeja que el usuario introduzca la opcin por

    el teclado dentro de un LineEdit.A este ComboBox le pondremos el name

    cmbFormato, como hicimos con el controlLineEdit.

    Hacemos clic sobre el ComboBox con elbotn derecho y elegimos Edit;hacemos clicen New Item e insertamos DVD; volvemos arepetirlo e insertamos VHS, quedando comose muestra en la figura 5.

    El funcionamiento para insertar losdems controles es el mismo. Para no exten-dernos mucho el lector debera mirar cmoqueda el formulario (vase figura 6) y expli-caremos cmo darle funcionalidad a losbotones existentes en el mismo.

    41MUNDO n81

    Linuxhttp://digital.revistasprofesionales.com

    Programacin

    Programacin para todos los pblicos

    Figura 1. QtDesigner.

    Figura 3. TextLabel.

    Figura 4. txtTitulo.

    Figura 5. cmbFormato.

    Figura 6. Formulario.

    Figura 2. Iniciar un proyecto.

  • 7/31/2019 Python y PyQT

    3/6

    Siguiendo con el orden de los nombres delos controles, el ComboBoxde Gnero se lla-mara cmbGenero y se aadirn los siguien-tes elementos: Accin, Blico, CienciaFiccin, Comedia, Animacin, Documental,Drama, Thriller, Musical, Terror.

    El name de ao txtAnio, el de DirectortxtDirector, el de Actores txtActores.

    El siguiente control que nos encontramoses TextEdit; es un control que sirve parainsertar textos muy largos, como por ejem-plo el argumento de la pelcula. Para que elcontrol fuera ms vistoso, hemos dejadosiempre visible la barra de desplazamientovertical. Esto se consigue poniendo la pro-piedad vScrollBarMode a Always On. A este

    control le damos el nombre detxtArgumento.

    El siguiente control que nos encontramoses un Botn. El control se llama PushBoton yaparte de llamarle btnGuardarle aadiremosun evento que se activar cuando hagamosclic sobre l.

    Para activar este evento haremos clicsobre el botn y miraremos las propiedades.Nos posicionaremos en la pestaa SignalHandlers; haremos clic sobre el evento clic-ked(); una vez hecho esto nos preguntar siqueremos guardar el archivo ui.h y le dire-mos que s (vase figura 7).

    Pues as procederemos con los demsbotones a los que llamaremos, por orden,btnPrimero, btnAnterior, btnSiguiente,btnUltimo, btnInsertar.

    Con esto ya tendremos acabada la partedel diseo del formulario.

    Transformar el formularioa Python (Pyuic)

    Una vez hecho el diseo del formulario nosqueda transformarlo a cdigo Python. Estepaso es el ms sencillo gracias al programaPyuic, que se instala junto el PyQT. Tan solohay que poner, en la consola:

    pyuic .ui -o

    .py

    Editores de cdigo Python

    Aun no existe, en Linux, un entorno dedesarrollo que una todos estos procesospara la programacin de Python+PyQT asque, de momento, tendremos que seguir lospasos explicados en este artculo.

    Ahora nos queda la edicin del cdigo denuestra aplicacin, porque de momento solotenemos la GUI y an no es funcional.

    Para esta tarea de programacin reco-miendo Kdevelop, aunque se puede usarcualquier editor de texto. Kdevelop ofrece unentorno amigable de programacin queayuda a la hora de escribir nuestro cdigo.

    42MUNDO n81

    Linux http://digital.revistasprofesionales.com

    Programacin

    from pysqlite2 import dbapi2 as sqliteimport stringimport osimport sys

    defvariable_home():home=os.environ.get(HOME)home=home+/.ColeccionVideosreturn home

    defcrear_base():conn = abrir_conexion()cursor=conn.cursor()SQL=CREATE TABLE Videos (Cod float, Titulo varchar, Formato varchar,

    Genero varchar, Anio integer, Director varchar, Actores varchar, Argumento var-char, PRIMARY KEY(Cod))

    cursor.execute(SQL)conn.commit()cursor.close()conn.close()

    definsertar (cod,titulo,formato,genero,anio,director,actores,argumento):conn = abrir_conexion()cursor=conn.cursor()SQL = INSERT into Videos (Cod , Titulo , Formato , Genero , Anio ,

    Director , Actores , Argumento) values ( + str(cod) + , + str(titulo) +

    , + str(formato) + , + str(genero) + , + str(anio) + , +str(director) + , + str(actores) + , + str(argumento) + )

    cursor.execute(SQL)conn.commit()cursor.close()conn.close()

    defactualizar (cod,titulo,formato,genero,anio,director,actores,argumento):conn=abrir_conexion()cursor=conn.cursor()SQL = UPDATE Videos SET Titulo= + str(titulo) + , Genero= +

    str(genero) + , Anio= + str(anio) + , Director= + str(director) + ,Actores= + str(actores) + , Argumento= + str(argumento) + WHERE Cod=+ str(cod)

    cursor.execute(SQL)conn.commit()cursor.close()conn.close()

    defabrir_conexion(): # Crea conexion a la Base de Datos Sqliterutadb=variable_home() + /sqlite.dbconexion=sqlite.connect(database=rutadb)return conexion

    defcrear_archivo():if not os.path.exists(variable_home()):os.makedirs(variable_home())archivo = open(variable_home() + /sqlite.db,w)archivo.close()

    defultimo_video():try:

    conn=abrir_conexion()cursor=conn.cursor()SQL=SELECT Cod FROM Videos ORDER BY Cod DESCcursor.execute(SQL)row=cursor.fetchone()ultimo=row[0]cursor.close()

    conn.close()except:

    crear_archivo()crear_base()ultimo=0

    return ultimo

    Listado 1 base.py

    Figura 7. btnGuardar.

  • 7/31/2019 Python y PyQT

    4/6

    En este artculo no se van a explicar las fun-cionalidades de Kdevelop, tan solo lo vamosa usar para editar nuestro cdigo.

    Para abrir los archivos de Python conKdevelop tenemos que hacer clic con elbotn derecho sobre el archivo Python, ele-gir Abrir con ... poner kdevelop3 y marcar laopcin Recordar asociacin de programapara este tipo de archivo.

    Arrancar nuestra aplicacin

    Algunos de vosotros ya tendris ganas de verla GUI funcionando. Para que se pueda ejecu-tar nuestra GUI tan solo debemos de aadireste cdigo al final de nuestra aplicacin:

    a = QApplication( sys.argv )

    m = Form1()

    a.setMainWidget(m )

    m.show()

    a.exec_loop()

    Y en la cabecera del programa aadirantes de la lnea:?

    from qt import *

    La siguiente lnea:?

    import sys

    Guardamos el archivo y en modo consolaponemos:

    python .py

    Si queremos que nuestro programa seconvierta en ejecutable, en modo root hace-mos lo siguiente:

    chmod a+x .py

    Y en modo usuario podemos arrancarlacon tan solo poner:

    ./.py

    Programando la aplicacin

    Ahora tendremos que aadirle la funcio-

    nalidad a nuestros botones y crear la cone-xin con la base de datos.Antes de ponernos a crear objetos de

    PyQT, podemos echar un vistazo al API deestos objetos en http://doc.trolltech.com/3.3/. De esta manera, ojeando el API ysiguiendo los cambios efectuados en esteartculo, no nos ser difcil comprender lasmodificaciones requeridas en otros objetos.

    Creamos un nuevo archivo llamadobase.py y le aadimos el cdigo que semuestra en el listado 1.

    Este archivo contendr las funcionesbsicas para atacar la base de datos, es decir,

    43MUNDO n81

    Linuxhttp://digital.revistasprofesionales.com

    Programacin

    Programacin para todos los pblicos

    if self.aux==0 :

    actualizar(self.codigo,self.txtTitulo.text(),self.cmbFormato.currentText(),self.cmbGenero.currentText(),self.txtAnio.text(),self.txtDirector.text(),self.txtActores.text(),self.txtArgumento.text())

    if self.aux==1 :

    self.ultimo=self.ultimo+1insertar(self.ultimo,self.txtTitulo.text(),self.cmbFormato.currentText(),self.cmbGenero.currentText(),self.txtAnio.text(),self.txtDirector.text(),self.txtActores.text(),self.txtArgumento.text())

    QMessageBox.information(self,Informacion,SE HA AGREGADOCORRECTAMENTE)

    self.aux=0self.codigo=self.ultimo

    Listado 2 def btnGuardar_clicked(self):

    def borrar_elementos(self):self.txtTitulo.clear()self.txtAnio.clear()self.txtDirector.clear()

    self.txtActores.clear()self.txtArgumento.clear()self.cmbFormato.setCurrentItem(0)self.cmbGenero.setCurrentItem(0)

    Listado 3 borrar_elementos

    if self.codigo > 1 :self.codigo=self.codigo-1conn=abrir_conexion()cursor=conn.cursor()SQL = SELECT * FROM Videos WHERE Cod=+str(self.codigo)cursor.execute(SQL)row = cursor.fetchone()self.codigo=row[0]self.txtTitulo.setText(row[1])

    self.cmbFormato.setCurrentText(row[2])self.cmbGenero.setCurrentText(row[3])self.txtAnio.setText(str(row[4]))self.txtDirector.setText(row[5])self.txtActores.setText(row[6])self.txtArgumento.setText(row[7])cursor.close()conn.close()

    else :QMessageBox.information(self,Primer Registro,NO HAY MAS

    REGISTROS)

    Listado 4 btnAnterior_clicked

    if self.codigo < self.ultimo :self.codigo=self.codigo+1conn=abrir_conexion()cursor=conn.cursor()SQL = SELECT * FROM Videos WHERE Cod=+str(self.codigo)cursor.execute(SQL)row = cursor.fetchone()self.codigo=row[0]self.txtTitulo.setText(row[1])self.cmbFormato.setCurrentText(row[2])self.cmbGenero.setCurrentText(row[3])self.txtAnio.setText(str(row[4]))self.txtDirector.setText(row[5])self.txtActores.setText(row[6])self.txtArgumento.setText(row[7])cursor.close()conn.close()

    else :QMessageBox.information(self,Ultimo Registro,NO HAY MAS

    REGISTROS)

    Listado 5 btnSiguiente_clicked

  • 7/31/2019 Python y PyQT

    5/6

    la conexin, la creacin de la base de datos yla insercin y actualizacin de registros.

    Tambin definir el directorio donde se vaa copiar la base de datos. En este caso secopiar en la HOME del usuario dentro deldirectorio .ColeccionVideos (el punto indica

    que este directorio es oculto). De esta mane-ra podemos tener varios usuarios con supropia base de datos de su coleccin devdeos, diferente a la de los otros usuarios.

    Ahora, dentro de nuestro archivo principalcoleccion.py debemos aadir la siguiente lnea:

    from base import *

    Esto nos permitir usar las funciones de labase de datos dentro de nuestro formulario.

    Buscaremos la funcin def btnGuardar_clicked(self): y le aadiremos el cdigo quese muestra en el listado 2.

    Este cdigo es el correspondiente al botnGuardar y comprueba si el registro que pre-tendemos guardar ya existe y necesitamosactualizarlo o es nuevo y necesitamos inser-tar un nuevo registro.

    En esta funcin encontramos una funcinde PyQT que nos muestra un mensaje deinformacin por pantalla:

    QMessageBox.information(self,

    Informacion,SE HA AGREGADO

    CORRECTAMENTE)

    Si buscamos en el API de QT encontramosesta funcin:

    QmessageBox::information( this,

    Application name, Unable to find

    the user preferences file.\n The

    factory default will be used instead.

    );

    Para pasarlo de QT a PyQT hemos cambia-do 2 cosas: hemos cambiado los :: por . y thispor self. Con esto ya tenemos este cdigofuncional en nuestra aplicacin.

    Buscaremos la funcin def btnInsertar_clicked(self): y le aadiremos el siguientecdigo :

    self.borrar_elementos()

    self.aux=1

    Y debajo de def btnInsertar_clicked(self):insertaremos la funcin que se muestra en ellistado 3.

    Observamos que en PyQT la llamada a lasdiferentes funciones de los objetos (mirar elAPI de estas funciones) se realiza de lasiguiente manera:

    Objeto.funcion

    Buscaremos la funcin def btnAnterior_clicked(self): y le aadiremos el cdigo quemuestra el listado 4.

    Buscaremos la funcin def btnSiguiente_clicked(self): y le aadiremos el cdigo quese muestra en el listado 5.

    Buscaremos la funcin def btnUltimo_clicked(self): y le aadiremos el cdigo quese muestra en el listado 6.

    Buscaremos la funcin def btnPrimero_clicked(self): y le aadiremos el cdigo quese muestra en el listado 7.

    Y, por ltimo, incluiremos el cdigo que semuestra en el listado 8 al final de la funcindef languageChange(self): .

    Con esto ya tendremos nuestra aplicacinfuncionando.

    Crear el script de instalacin

    Una vez acabada la aplicacin ms de uno sepreguntar cmo poder mover nuestra apli-cacin y facilitar su instalacin a personascon conocimientos escasos del sistema ope-rativo Linux.

    Por eso vamos a crear un pequeo scriptde instalacin, comentando los pasos a seguir.

    Paso 1Crearemos un archivo llamado setup.py, queser el encargado de automatizar el proceso

    de instalacin. En este archivo introducimosel cdigo que se muestra en el listado 9.Este archivo comprobar que tenemos

    instalados todos los programas necesariospara que la aplicacin funcione y procedera copiar los archivos al directorio apropiado.Tambin copiar el archivo coleccionvideo.desktop, que ser el encargado de crear unaentrada en el men del escritorio.

    Paso 2Creacin del archivo coleccion.desktop quecontendr el texto que se muestra en el lis-tado 10.

    44MUNDO n81

    Linux http://digital.revistasprofesionales.com

    Programacin

    conn=abrir_conexion()cursor=conn.cursor()SQL = SELECT * FROM Videos WHERE Cod=+str(self.ultimo)cursor.execute(SQL)row = cursor.fetchone()if self.codigo !=0:

    self.codigo=row[0]

    self.txtTitulo.setText(row[1])self.cmbFormato.setCurrentText(row[2])self.cmbGenero.setCurrentText(row[3])self.txtAnio.setText(str(row[4]))self.txtDirector.setText(row[5])self.txtActores.setText(row[6])self.txtArgumento.setText(row[7])

    cursor.close()conn.close()

    Listado 6 btnUltimo_clicked

    conn=abrir_conexion()cursor=conn.cursor()SQL = SELECT * FROM Videos WHERE Cod=+str(1)cursor.execute(SQL)row = cursor.fetchone()if self.codigo !=0 :

    self.codigo=row[0]

    self.txtTitulo.setText(row[1])self.cmbFormato.setCurrentText(row[2])self.cmbGenero.setCurrentText(row[3])self.txtAnio.setText(str(row[4]))self.txtDirector.setText(row[5])self.txtActores.setText(row[6])self.txtArgumento.setText(row[7])

    cursor.close()conn.close()

    Listado 7 btnPrimero_clicked

    self.aux=0self.ultimo=ultimo_video()conn=abrir_conexion()cursor=conn.cursor()

    SQL = SELECT * FROM Videos ORDER BY Cod ASCcursor.execute(SQL)row = cursor.fetchone()try:

    self.codigo=row[0]self.txtTitulo.setText(row[1])self.cmbFormato.setCurrentText(row[2])self.cmbGenero.setCurrentText(row[3])self.txtAnio.setText(str(row[4]))self.txtDirector.setText(row[5])self.txtActores.setText(row[6])self.txtArgumento.setText(row[7])

    except:self.codigo=0

    cursor.close()conn.close()

    Listado 8 languageChange

  • 7/31/2019 Python y PyQT

    6/6

    En Name ir el nombre de la aplicacin.En Exec ir la ruta del ejecutable de la apli-

    cacin; en este caso, como es un script dePython, la forma es la siguiente:

    python .py

    En Icon ir la ruta del icono, que en estecaso est en /usr/share/apps/coleccionvi-deo/icono.xpm.

    En Categories ir la categora donde que-ramos que se muestre nuestra aplicacin; eneste caso ser en Oficina.

    En Comment ir un comentario sobrenuestra aplicacin.

    En Terminal ir un 1 si queremos que laaplicacin se abra en una ventana de terminaly 0 si no queremos que se abra esta ventana.

    En Type ir el tipo de entrada de los 4posibles: Application, Link, FSDevice yDirectory. En este caso Application por quees una aplicacin.

    Paso 3Creacin de un icono para nuestra aplica-

    cin llamado icono.xpm (puede llevar otrasextensiones). Ms informacin sobre la cre-acin del icono en http://artist.kde.org/applications.html.

    Paso 4Crear un archivo llamado README o INSTALLdonde se muestren las instrucciones de ins-talacin. En este caso, para instalar la aplica-cin tan solo es necesario ejecutar:

    # python setup.py

    Nota: # significa que ese archivo se debeejecutar como root. Para ello, antes ejecutar:

    $ su

    Password:(teclear el password de root)

    Una vez ejecutado este script apareceren nuestro men del escritorio, en la entra-da de Oficina, una entrada de nuestra apli-cacin con su icono (vase figura 8).

    Paso 5Ahora ya solo nos queda empaquetar estosarchivos en un archivo.tar.gz. Para esto noshemos de situar dentro del mismo directorioy ejecutar:

    tar zcvf coleccionvideo.tar.gz *

    Y con esto habremos terminado. En el CD-ROM que acompaa la revista se incluye elcdigo completo de la aplicacin, as comoel software utilizado. Esperamos que esteejemplo haya resultado sencillo e interesan-te al mismo tiempo.

    45MUNDO n81

    http://digital.revistasprofesionales.com

    Programacin

    Programacin para todos los pblicos

    import sysimport osfrom qt import qVersion, PYQT_VERSION_STRfrom pysqlite2 import dbapi2 as sqlite

    pythonVersion = sys.version_info

    ifpythonVersion < (2, 3, 4) :print #################################################################print You need Python 2.3.4 or greater to install . Exiting...print #################################################################sys.exit(1)

    qtVersion = qVersion()ifqtVersion < 3.2.3 :

    print #################################################################print You need Qt 3.2.3 or greater to install . Exiting...print #################################################################sys.exit(1)

    pyqtVersion = PYQT_VERSION_STRifpyqtVersion < 3.12 :

    print #################################################################print You need PyQt 3.12 or greater to install . Exiting...print #################################################################

    sys.exit(1)

    ifsqlite.version < 2.0.3 :print #################################################################print You need pysqlite 2.0.3 or greater to install . Exiting...print #################################################################sys.exit(1)

    # =================================================================

    printInstalling ...\n

    pathN=/usr/share/apps/appName=coleccionvideo/pathN=pathN+appNameifnot os.path.exists(pathN):

    os.makedirs(pathN)printCopying files ...\n

    os.system(cp -f base.py + pathN )os.system(cp -f coleccion.py + pathN )os.system(cp -f icono.xpm + pathN )os.system(chmod +x coleccion.py + pathN )

    pathD=/usr/share/applicationsos.system(cp -f coleccionvideo.desktop + pathD )printInstallation complete.

    Listado 9 setup.py

    [Desktop Entry]?Name=ColeccionVideosExec=python /usr/share/apps/coleccionvideo/coleccion.pyIcon=/usr/share/apps/coleccionvideo/icono.xpmCategories=Application;Office;Comment=Mi Coleccion de Videos

    Terminal=0Type=Application

    Listado 10coleccion.desktop

    ReferenciasGAPI de la librera QT: http://doc.trolltech.com/3.3/G PyQT: http://www.riverbankcomputing.co.uk/pyqt/index.phpG SQLite: http://www.sqlite.org/G PySQLite: http://www.pysqlite.orgG Python: http://www.python.org/G Lista usuarios de Python en espaol: http://listas.aditel.org/listinfo/python-esGKdevelop: http://www.kdevelop.org/

    Figura 8. La aplicacin y su iconoaparecen en el men Oficina.

    Linux