GLib y GObject son 2 bibliotecas de C separada de la que el GTK + GUI toolkit está construido (entre otras cosas).
Como C es un lenguaje de nivel inferior, GLib proporciona una gran cantidad de funcionalidades básicas como las utilidades similares a las incorporadas en Python (entrada/salida de archivos, manipulación de cadenas, gestión de memoria, subprocesos, etc.).
Dado que C no es un lenguaje orientado a objetos, GObject proporciona un sistema de objetos basado en C que incluye propiedades y herencia (una vez más, integrado en Python). En Python, rara vez se usa GLib directamente (porque Python tiene la mayor parte de esa funcionalidad incorporada), pero GObject depende de GLib.
Todas las bibliotecas basadas en GObject están diseñadas para admitir enlaces de lenguaje a otros lenguajes como Python.
Al punto de su pregunta, GObject proporciona un sistema de eventos conocido como "señales". Cualquier objeto derivado de GObject puede "emitir" señales para enviar notificaciones de un evento que ocurra. La clase MPDProtocolClient
en python-mpdor
se deriva de GObject y, por lo tanto, puede emitir señales. Las aplicaciones "conectan" funciones a estas señales. F
Por ejemplo, el README muestra este ejemplo:
import gobject
import mpdor
def notify(client, vol):
print "mpd volume is at ", vol + "%"
client = mpdor.client.Client()
client.connect("mixer-change", notify)
gobject.MainLoop().run()
En este caso, la función llamada notify
se "conectados" a la señal "mixer-change"
lo que significa que la función será llamado en cualquier momento el cliente "emite "Esa señal. La llamada gobject.MainLoop().run()
ingresa a "main event loop" (básicamente un bucle infinito) que es un concepto estándar en la programación basada en eventos.
Probablemente no encontrarás muchos tutoriales de GObject/Python, sin embargo, si aprendes un poco de los principios básicos de Python/GTK +, entonces es probable que entiendas los conceptos del ciclo de eventos, señales y devoluciones de llamada de señal. (Parece que python-mpdor usa GTK + 2, que sería PyGTK en comparación con GTK + 3 más nuevo, que es PyGObject).
Buena suerte.
+1 Muy buena explicación. – RanRag