Jul 15, 2011

Introducción Practica a Qt en Python

Para todos los interesados en aprender a programar en Qt usando el lenguaje Python, he preparado un pequeño tutorial introductorio práctico acerca de este tema.

He preparado un pequeño tutorial dedicado a los amigos de ZonaQt y en general para todos los interesados en el tema.
A mí personalmente me gutan mucho aquellos tutoriales de caracter practico, por lo tanto he decidido que para hacer este tutorial más interesante, vamos a desarrollar un reproductor multimedia sencillo, para reproducir videos, musica, imagenes y streaming, y con un manejo muy sencillo de listas de reproducción.
Algunos de los temas a tratar serán:
  • Diseño de interfaces visuales usando Qt Designer
  • Señales y Slots
  • Temporizadores
  • Uso del modulo de reproducción multimedia Phonon
El tutorial está diseñado para funcionar tanto con PyQt como con PySide, Python 2 y Python 3.
Ademas, como IDE, he elegido usar NINJA-IDE como entorno de desarrollo, y de esta manera lograr estandarizar el proceso de desarrollo para diferentes plataformas (Linux, Mac y Windows).
El código fuente esta bajo GPLv3 y el tutorial está bajo cc-by-sa-3.0-unported, el tutorial a su vez está tanto en formato PDF como ODT (para LibreOffice), para que así, quien quiera modificarlo o agregarler más cosas, sea libre de hacerlo.
Pueden descargar todo junto en un mismo paquete desde aquí.

15 comments:

  1. Hola Gonzalo, estoy mirando el tutorial y me surge una duda. ¿Cómo insertas el elemento (Phonon::VideoPlayer) en el editor de widgets?

    Estoy siguiendo implentado el reproductor directamente con c++ y qtcreator y no veo como insertar este elemento. La única forma que creo que tengo es usarlo directamente desde código.

    Un saludo, y enhorabuena por el tutorial, está genial.

    ReplyDelete
  2. Phonon::VideoPlayer aparece dentro de la barra de widgets, fijate que arriba de la barra de widgets aparece un cuadro de texto donde podes filtrar los widgets por nombre, escribiendo phonon tiene que aparecer, si no aparece decime que versión de Qt, QtCreator y que sistema operativo estás usando ¿Linux, Mac, Widows?

    ReplyDelete
  3. Pues no me sale, o no lo veo. Estoy usando qtcreator 2.1.0 con qt 4.7.2 bajo una ubuntu 11.04.

    ReplyDelete
  4. Por lo que pude averiguar, necesitas el paquete libphonon4-designer.

    ReplyDelete
  5. Alguien ha seguido el tuto? Estoy entrampado en la parte en que se empieza a escribir codigo en Ninja Ide... Se crea un archivo VideoPlayer.py y ahí se copia y pega el codigo que aparece en el pdf, pero desde ahí aparecen explicaciones y cosas, y no se donde poner más codigos para hacer que la cosa funcione, ¿si pongo esos restos de codigo a continuacion del que pegamos? o ¿asocio esos restos a otros archivos?

    ReplyDelete
    Replies
    1. revisa el directorio src que esta disponible con la descarga allí tienes el código completo ;)

      Delete
  6. X__X excelente hipersayan_x estaba buscando hace días material al respecto de Qt + Python y encontraba cosas muy básicas y repetidas hasta que di con tu tuto

    Muchas gracias esta fantástico, y lamentablemente tiene poca difusión... creo que deberías postearlo en EL

    PD: soy mcun

    ReplyDelete
    Replies
    1. @mcun, welcome! :D. Tengo que ponerme a hacer la v2.0, y cuando la termine seguro la presento en EL, nada más que ahora estuve ocupado con Webcamoid, y dando los toques finales para Perfect Clone v2.0 y ahora tengo volver con Carnival. Así que cuando me desocupe con Carnival, se viene el nuevo tutorial :D
      Igualmente para EL quiero hacer un tutorial un poco más introductorio y completo sobre Qt.

      Delete
    2. LO voy a estar esperando... ahora estoy haciendo una aplicación media compleja y este tuto me ha venido de perlas para entender de que va QT

      Si consigo que me aumenten el sueldo te invito una cerveza :lol:

      Delete
  7. La UI se me ejecuta sin problemas, pero los iconos no se muestran. Ni de forma normal, ni cargados desde un resource. Además, si llamo a videoplayer.py por consola desde otra carpeta, no encuentra los archivos .ui porque son rutas relativas...

    Muchas complicaciones desde el principio para alguien que trata de dejar la web y pasarse a las aplicaciones de escritorio!! :(

    ReplyDelete
    Replies
    1. Creo que voy a probar a compilar los archivos .ui y .qrc a Python con pyside-uic o algo por el estilo, publicaré los resultados por si alguien tiene problemas similares.

      Delete
    2. Estoy siguiendo esta guía: http://qt-project.org/wiki/PySideSimplicissimus_Module_5_Combine

      Me está costando un poco adaptarlo al código que ya tenía hecho, pero parece que ya se muestran los iconos, y el programa se ejecuta correctamente lo llame desde donde lo llame, no hay problemas de rutas.

      También he reestructurado las carpetas y los ficheros. Por ejemplo, ahora en vez de cargar el fichero de la UI, la carpeta UI es un módulo, y dentro tiene el archivo videoplayer_ui.py el cual contiene tambien un import a icons_rc.py, que viene a ser el archivo de resources tambien compilado. Cargarlo es tan sencillo como esto: http://pastebin.com/j1cULy7F

      La estructura de momento me ha quedado así: http://imageshack.us/photo/my-images/802/filesc.png/

      Si alguien quiere esta versión para echarle un ojo o lo que sea, la subiré encantado a GitHub para todos :3

      Un saludo!

      Delete
    3. Por alguna razón, ni PyQt ni PySide toman correctamente las rutas relativas en los archivos .ui y por eso no carga los íconos. Sin embargo, en mí caso si lanzo el programa desde consola sí cargan correctamente.
      Estuve trabajando hace un tiempo en una segunda versión, pero lamentablemente en estos momentos estoy muy, muy, muy ocupado con otros proyectos y no tengo tiempo para corregir el tutorial, así que si ya tienes algo hecho podrías adaptarlo al segundo tutorial y hacer un pull request a Google Code.

      Delete
  8. Estaría interesante, tengo experiencia programando, aunque en Python todavía ando dando mis primeros botes. Aunque ya he podido hacer una app más o menos funcional, sigo verde...

    Puedo intentar avanzar, pasarte algo por GitHub para que opines, y si te gusta o me corriges algo (cosa que agradecería :D) podría intentarlo

    ReplyDelete