Primeros Pasos con Python + Qt #1

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.

¿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:

3

Ver Codigo

Lo ejecutamos desde consola así:

python app1.py

Les debería aparecer esta ventana

2

¿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.

LINK AL FORO

Espero les sirvan, me despido, como siempre un placer pertenecer a esta maravillosa comunidad.


41 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   @trust17 dijo

    Gracias por el post!

  2.   Annubis dijo

    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é 🙂

    1.    F3niX dijo

      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.

    2.    F3niX dijo

      No puedo modificar, se lo dejo a algún editor.

      Saludos.

      1.    neysonv dijo

        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

  3.   Germán dijo

    Me llama la atención una cosa: por qué usás «from import *» en el código?

    Saludos!

    1.    F3niX dijo

      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.

      1.    Germán dijo

        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…»

        1.    F3niX dijo

          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.

          1.    F3niX dijo

            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.

          2.    Germán dijo

            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?

          3.    felipe dijo

            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.

          4.    Germán dijo

            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!

        2.    F3niX dijo

          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

          1.    dhunter dijo

            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

  4.   msx dijo

    Me quedé con ganas de más, para cuando la 2da parte!?
    Saludos 🙂

  5.   eliotime3000 dijo

    Muy buen tutoriales, además que pueda ser que sea más cómodo para programar.

  6.   dhunter dijo

    Aqui un ejemplo de una interfaz desde cero (sin usar QtDesigner).

    https://github.com/xr09/metrocontador

    1.    F3niX dijo

      Excelente la app dhunter, acá ni sabemos cuanto nos cobran por la electricidad, jaja saludos.

      1.    dhunter dijo

        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.

  7.   José Eloy dijo

    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

  8.   Bryan Rodríguez dijo

    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?.

    1.    felipe dijo

      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

      1.    felipe dijo

        #!/usr/bin/python3
        o si no
        #!/usr/bin/python2

        1.    F3niX dijo

          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.

          1.    Bryan Rodríguez dijo

            ¿Cómo lo verifico?.

          2.    F3niX dijo

            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.

          3.    Bryan Rodríguez dijo

            Muchísimas gracias, me sirvió de mucha ayuda.

          4.    Mauricio Tobares dijo

            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 😀

      2.    Bryan Rodríguez dijo

        Me da el mismo error.

        1.    Germán dijo

          Tenés instalado PySide?

          1.    Bryan Rodríguez dijo

            Lo tengo instalado.

        2.    felipe dijo

          Y proba con PyQT4 instalalo y luego cambia las lineas de PySide por PyQT4 o PyQt4, y dale ejecutar. jojo. Usa el eclipse. Suerte.

          1.    Bryan Rodríguez dijo

            ¿Cómo hago eso?.

  9.   karlinux dijo

    Muchas garcias !!! Esperando el segundo capítulo

    1.    F3niX dijo

      Para este viernes quizás lo publique (La universidad me tiene un poco full) un saludo.

  10.   MauricioTobares dijo

    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 😀

    1.    F3niX dijo

      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

  11.   Dante dijo

    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

  12.   jorge dijo

    hola muy bueno tu post, tengo una preguntica yo podria vender mi app hecha con pyside sin ningun problema?

    1.    F3niX dijo

      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.