Un buen ejemplo de código PyGTK: Decibel

Decibel Audio Player es un programa liviano, sencillo, no orientado a tener miles de funciones (Amarok, les suena? 😀 ), sino sólo a reproducir música de una lista. La verdad que las capturas de pantalla («everybody loves screenshots!») pintaban prometedoras, y cuando leí que estaba hecho en Python + GTK, bajé el fuente a ver qué onda[1]…

Y la verdad que me está gustando lo que estoy leyendo. La parte de módulos me parece bárbara, da gusto leerla: para hacer un módulo propio (aka ‘plugin’), uno hereda de una clase «Modulo» (también hay un ThreadedModule) y se registra a los eventos que quiere recibir, puede emitir eventos a los demás, etc. Las pantallas están hechas con Glade, el código está bien comentado (y bien identado, es Python! 😀 ), el tamaño del proyecto y del fuente es manejable (al usar Glade, casi no se ve código de manejo de ventanas), usa semáforos, locks, está bien modularizado y orientado a objetos, etc.

Vista de un .glade abierto (con el vim de fondo):

Es resumen, si estás aprendiendo python (o programación, por qué no), leer el código fuente de este programa puede ser muy entretenido, para aprender cómo hacen las cosas los demás (y cómo se hacen las cosas bien hechas, je). Demás está decir que esto se puede hacer gracias a que es Software Libre, que si no… (es más, me gustaría meter algunas features que no me gustan y mandarlas al desarrollador…).

Espero que le pique el «bichito pythónico» a más de uno.

Saludos
Marcelo
[1]: Mentiira! 😀 Como todavía uso Feisty (Decibel ya está en los repos de Gutsy), bajé el .deb de la página y cuando GDebi me dijo que era para la arquitectura i386 (tengo un x86-64), putié y dije «por qué, si es python, viejo! tiene que ser multiplataforma!». Ahí bajé el código.
PD: Guarda: Miren los __init__.py de los subdirectorios, ahí está siempre lo que uno busca. 🙂

Actualización: Envié un pequeño parche, que implementa el «cerrar ventana y no salir» y el «iniciar minimizado», aunque necesita que el módulo cargue siempre el StatusIcon (no estaba así por defecto). Espero que el desarrollador principal lo acepte. 🙂


Comentarios

7 respuestas a «Un buen ejemplo de código PyGTK: Decibel»

  1. Avatar de Pablo Arroyo
    Pablo Arroyo

    recien estoy aprendiendo a programar en python y ya me estoy copando…

    ( =

  2. Avatar de Victor Rojas
    Victor Rojas

    Al igual que Pablo, yo tambien estoy aprendiendo, he bajado las fuentes, he intentando ejecutarlo desde el codigo, al ejecutar me marca un error relacionado con mainloop.glib, ya me puse a googlear y nada, supongo que tiene que ver con python-dbus, pero hasta ahi no anda, simplemente me muestra un esqueleto sin activarse el combo, ni el listdir, ¿Que podra ser?

    Saludos

  3. Avatar de Marcelo

    Hola Victor, por favor, copiá y pegá el error…

    Saludos

  4. Avatar de Victor Rojas
    Victor Rojas

    Hola de nuevo:

    Ya intente corregir el error y nada, aca lo posteo

    Traceback (most recent call last):
    File «./decibel-audio-player.py», line 30, in realStartup
    import atexit, dbus.mainloop.glib, gui.about, modules, webbrowser
    ImportError: No module named mainloop.glib

    Al ejecutarlo me carga la aplicacion pero sin nada, es decir, no muestra el combo ni el dirlist, ni las imagenes que se muestran en las screenshots.

    Saludos y gracias por su atencion

  5. Hola Victor, ante todo disculpá la demora en la respuesta. Me parece que te está faltando instalar el paquete «python-dbus», para poder utilizar DBus desde Decibel. En Ubuntu lo instalás con el comando «sudo apt-get install python-dbus».

    Cuando te aparecen errores de este tipo «no module named xxxx» es porque generalmente el módulo respectivo (y que se hace referencia desde la aplicación que estás tratando de ejecutar) no está instalado.

    ¡Saludos!
    Marcelo

  6. Avatar de Victor

    Hola Marcelo:

    Gracias por responder, revisando los paquetes instalados, ya tengo instalado el que haces mención y el problema aun persiste, ya estuve checando en la red y precisamente como dices, el por falta de ese paquete, lo que no me explico el porque no funciona si ya esta instalado.

    ¿Podrías recomendarme algun libro para programar en PyGtk?, me interesa hacer una aplicación al estilo Decibel, solo que con mas funciones, la idea es tomar a Decibel para agregarselas, pero nada mas no quiere ejecutarse :S

    Saludos y hasta pronto

  7. Uhm… es extraño, fijate de ejecutar decibel configurando la variable PYTHONPATH a /usr/share/python-support/python-dbus/dbus (por ejemplo con «export PYTHONPATH=/usr/share/python-support/python-dbus/dbus ./decibel-audio-player.py”). En todo caso, preguntá por acá, seguramente te contestan.

    Libro de PyGTK no hay que yo sepa, sólo la documentación y el tutorial (versión en español acá) de la página oficial y algunos artículos extra.

    Saludos

Deja una respuesta

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