Este tutorial va enfocado a enseñar el uso de el framework QT usando Python como lenguaje de programación, para esto podemos usar tanto PySide como PyQt, pero en este tutorial usaremos PySide debido a que al autor de este tutorial le gusta mas la licencia LGPL de PySide que la GPL o Comercial de PyQt.
Índice
¿Primero… Que es Python?
Según la Wikipedia:
«Python es un lenguaje de programación interpretado de altísimo nivel cuya filosofía hace hincapié en una sintaxis muy limpia y que favorezca en un código legible.”
Python es un lenguaje de programación multipadradigma, por lo que soporta diferentes paradigmas de programación python por ejemplo soporta: Programación Orientada a Objetos(POO), Programación imperativa(Estructurada) y en menor medida programación Funcional.
¿Solo eso?
No, además es un lenguaje de tipado dinámico, lo que quiere decir que python nos permite asignarles distintos tipos de valores a una misma variable durante la ejecución del programa, unos lo ven como una ventaja otros como una desventaja, dense cuenta ustedes mismos.
Además de lo ya mencionado, Python nos permite (como muchos otros), programación tanto en el entorno web como en el escritorio web, también es multiplataforma, actualmente soporta Gnu/Linux, Windows, Mac osx, Android (Si falta alguno mencionarlos para su modificación).
¿Que es QT?
QT es un framework multiplataforma, desarrollado originalmente por Nokia, para luego ser vendido a Digia, que se utiliza para el desarrollo de aplicaciones, está escrito en C++, pero se puede utilizar en otros lenguajes a través de Bindings (en nuestro caso PySide o PyQt)
Diferencias entre PySide y PyQt
Principalmente
- Licencia, PySide esta licenciado bajo los términos de la LGPL y PyQT esta bajo los términos de la GPL o bajo licencia comercial, por lo que necesitaríamos pagar en caso de crear una aplicación cerrada.
- PySide es creado por Nokia, y PyQt por RiverBank.
- PySide nos ahorra el problema de usar STR cada ves que usamos QString de cada uno de los objetos de QT.
Los cambios completos los podemos detallar Aqui.
Preparación:
Instalamos Qt:
Si tenemos una distro con Kde ya deberiamos tener lo necesario, si no:
sudo apt-get install qt4-dev-tools
Instalamos PySide:
sudo apt-get install pyside pyside-tools
Nuestra Primera Aplicación Python + QT
Nos vamos a nuestro editor de texto favorito, yo les recomiendo que instalen sublime-text2, pero pueden usar el que prefieran, y tipeamos el siguiente código y lo guardamos con el nombre que queramos siempre terminando con la extension “.py”, yo lo guardare como app1.py:
Lo ejecutamos desde consola así:
python app1.py
Les debería aparecer esta ventana
¿Que?, ¿Solo Eso, pues si antes solo tenias consola de que te quejas? ¿Qué esperabas, un Erp? vamos hombre por algo se empieza.
Ahora expliquemos el código:
from PySide.QtGui import *
from sys import exit, argv
Aquí importamos los módulos de necesarios para la ejecución de PySide.
app = QApplication(argv)
Creamos la instancia de Qapplication con el nombre app.
window = Qwidget()
Creamos la instancia de QWidget().
window.setWindowTitle("Primera App PySide")
Ejecutamos el método setWindowTitle, que recibe un String como parámetro para “setear” el titulo de nuestro Qwidget.
window.show()
Mostramos nuestra ventana
exit(app.exec_())
por ultimo ejecutamos el ciclo infinito de ejecución de nuestra QApplication().
Gracias
Gracias para los que me hayan seguido hasta acá y les haya sido útil . Para el próximo tutorial explicare como diseñar nuestras ventanas con QT Designer e importarlas a nuestros proyectos.
Adicional mente les añado el link al foro de desde linux donde tengo un pequeño tema con una pequeña biblioteca de tutoriales y guías de python, que contiene diferentes termas que incluyen:
Tutoriales Python básicos
WxPython
PyQt y PySide
Django
Web2Py
Programación científica en python.
Y muchos mas.
Espero les sirvan, me despido, como siempre un placer pertenecer a esta maravillosa comunidad.
41 comentarios, deja el tuyo
Gracias por el post!
2 cosas:
1. Qt no fue desarrollado originalmente por Nokia, sino por Trolltech, que luego fue comprada por Nokia. Ésta última luego vendió Qt a Digia.
2. La imagen del primer ejemplo de apllicación no corresponde con el código.
Gracias por el tutorial, lo seguiré 🙂
Tienes toda la razón se me paso por alto. Y lo segundo tienes también razón, es que lo cambie para hacerlo mas sencillo y no usar class y se me paso por alto la modificación, errores de principiante. Ya paso las correcciones para que algún editor las apruebe.
No puedo modificar, se lo dejo a algún editor.
Saludos.
mandale un mail a un editor con el tutorial corregido. puedes enviarselo al mail de @nano que es uno de los editores
mailto:nano.world.contact@gmail.com
porfavor no dejes el tutorial asi
saludos
Me llama la atención una cosa: por qué usás «from import *» en el código?
Saludos!
Es la forma correcta de importar, al importar así le dices que class especifica del modulo quieres importar, y no llamas al modulo completo.
Saludos.
Me parece medio confuso eso. Además, no es recomendado en el PEP8:
«Wildcard imports (from module import *) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools…»
Me he guiado mas que todo por códigos profesionales, como por ejemplo Ninja-Ide, puedes ver el codigo aca: https://github.com/ninja-ide/ninja-ide/blob/master/ninja_ide/core/ipc.py, esta hecho en PyQt también , pero de cualquier formal no hay nada que te obligue a usar una forma o la otra.
Acá puedes ver una discusión en StackOverflow, acerca de esto:
http://stackoverflow.com/questions/710551/import-module-or-from-module-import
Allí mencionan pros y contras de cada uno de los estilos.
a ok disculpa no te entendí, eso lo se, solo lo hice porque no iba a dar una explicación de cada elemento QApplication, QWidget, entonces generalice pero tienes toda la razón.
Disculpa el malentendido.
No, no entendiste o no prestaste atención… me refiero a usar «from module import *», o sea, me refiero al «asterisco»… en ese post de StackOverflow están hablando de otra cosa, pero igual lo recalcan:
«Either method is acceptable, but don’t use from module import *.»
Se entiende ahora?
Tiene razón German. ¿De que te sirve el from module import si importas todo el contenido con el asterico, para eso import module. Slds igual lindo post.
Ahh bueno, ahora entiendo… de todas formas no me lleves mucho el apunte, yo también soy un iniciante en Python. Si te pasás por mi blog, vas a ver que hice un post simiilar al tuyo pero con Gtk+ 3 usando PyGObject.
Saludos y gracias!
Acá dejo el Pep8, en español recomendando el uso de im
Es muy desaconsejable el uso de imports relativos para importar código de un paquete. Utiliza siempre la ruta absoluta del paquete para todos los imports. Incluso ahora que el PEP 328 [7] está totalmente implementado en Python 2.5, el usar imports relativos se desaconseja seriamente; los imports absolutos son más portables y normalmente más legibles.
Cuando importes una clase de un módulo, normalmente es correcto hacer esto
from myclass import MyClass
from foo.bar.yourclass import YourClass
Saludos
Lean este: http://stackoverflow.com/questions/3615125/should-wildcard-import-be-avoided
Alex Martelli (core py developer) recomienda algo así:
from PyQt4 import QtCore, QtGui
Me quedé con ganas de más, para cuando la 2da parte!?
Saludos 🙂
Muy buen tutoriales, además que pueda ser que sea más cómodo para programar.
Aqui un ejemplo de una interfaz desde cero (sin usar QtDesigner).
https://github.com/xr09/metrocontador
Excelente la app dhunter, acá ni sabemos cuanto nos cobran por la electricidad, jaja saludos.
Gracias, es una de esas apps que uno hace para uso personal y le sirve a los demás. Aquí en Cuba el recibo viene desglosado con la tarifa, es fácil copiar el algoritmo.
Estaré muy al pendiente de este curso. Desde hace tiempo estoy interesado en hacer aplicaciones multiplataforma y creo que la combinación Python + QT/Pyside es una magnífica opción. Saludos y felicidades por la iniciativa
Seguí todos los pasos exactamente como dices pero cuando ejecuto la aplicación app1.py en la terminal me dice Traceback (most recent call last):
File «app1.py», line 1, in
from PySide.QtGui import *
ImportError: No module named PySide.QtGui. ¿A qué se debe?.
eso es por que estas usando una version de python como interprete por defecto, pero no tienes instalado el pyside para esa version.
Prueba agregando al inicio del fichero:
#!usr/bin/python3
o si no
#!usr/bin/python2
Te recomiendo uses Eclipse con pydev y configures bien el interprete.
slds
#!/usr/bin/python3
o si no
#!/usr/bin/python2
PySide todavía no es compatible con Python3, ten cuidado con eso, y segundo verifica los imports mediante la consola interactiva de python, asi sabes que tienes o no instalado, también instala pip.
¿Cómo lo verifico?.
En una consola usa «Python», de todas formas te recomiendo entrar en la biblioteca que deje abjo en el post y bajar «python para todos», necesitas mas base.
Saludos y Suerte.
Muchísimas gracias, me sirvió de mucha ayuda.
mira amigo F3niX encontré esto, parece que para python 3.3.2 sobre windows (que es lo que yo tengo hasta la semana que viene) tienen binarios para 32 bits y 64 bits, yo probé tu ejemplo y funciona con python 3.3.2 y utilizo el PyScripter que te instala distintos entornos, si abris el de python 3 te ejecuta los scripts como python 3 y si abris el de 2.7 los ejecuta como 2.7 y asi (logicamente tenes que tener instalado esa versión de python… se sobre entiende)
http://qt-project.org/wiki/PySide_Binaries_Windows
ahi te dejo, chusmealo, a lo mejor le sirve a alguien mas 😀
Me da el mismo error.
Tenés instalado PySide?
Lo tengo instalado.
Y proba con PyQT4 instalalo y luego cambia las lineas de PySide por PyQT4 o PyQt4, y dale ejecutar. jojo. Usa el eclipse. Suerte.
¿Cómo hago eso?.
Muchas garcias !!! Esperando el segundo capítulo
Para este viernes quizás lo publique (La universidad me tiene un poco full) un saludo.
Amigo F3nIX estoy esperando su tutorial N° 2, 3, 4 … N jejeje
ya tengo mi elegantisimo linux instalado con el PySide esperando y todo!!!
a ver cuando se anima a mostrar algun nuevo tuto 😀
Disculpa amigo, lo tengo en borradores pero el trabajo y los estudios no me han dado tiempo, prometo sacar algo esta semana.
Un gran saludo
Hola, desde hace tiempo que me interesa aprender Python pero tengo ciertas dudas. Lo que quiero es hacer una aplicacion para mejorar un poco el proceso de informacion de la empresa familiar en donde trabajo, quisiera hacer algo para windows, con ventanas en un primer momento, trabajaria tdo en una sola pc y luego que se pueda conectar via internet a la base de datos a la que se conectarian un par de computadoras. Hay mucha diversidad en cuanto a hacer darle GUI a la aplicacion y eso me marea. ¿Que me recomiendas para darle un aspecto moderno y atractivo? Tambien haria algunos graficos estadisticos e imprimir informes, ¿que puedo usar para tal fin?. Saludos
hola muy bueno tu post, tengo una preguntica yo podria vender mi app hecha con pyside sin ningun problema?
Bueno las licencias siempre son una locura, pero las licencias de software libre tambien te permiten vender software, lo que pasa es que la GPL, te obliga a distribuir el codigo a diferencia de la LGPL, que no te obliga a hacerlo.
De todas formas en esto de las licencias no soy experto.
Saludos.