Python y PyQT
-
Upload
aprender-libre -
Category
Documents
-
view
226 -
download
0
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