domingo, 14 de octubre de 2007

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? :-D ), 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! :-D ), 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! :-D 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, hay 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. :-)

3 comentarios:

Pablo Arroyo dijo...

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

( =

Victor Rojas dijo...

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

Marcelo Fernández dijo...

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

Saludos