GLib和GObject是两个独立的C库,其中构建了GTK+ GUI工具包(以及其他一些东西)。
由于C是一种较低级别的语言,GLib提供了许多基本功能,例如类似于Python内置的实用程序(文件输入/输出、字符串操作、内存管理、线程等)。
由于C不是面向对象的语言,GObject提供了一个基于C的对象系统,其中包括属性和继承(同样也内置在Python中)。在Python中,您很少直接使用GLib(因为Python已经内置了大部分这些功能),但是GObject依赖于GLib。
所有基于GObject的库都被设计为支持与其他语言(如Python)的语言绑定。
针对你的问题,GObject提供了一个名为“信号”的事件系统。任何派生自GObject的对象都可以“发射”信号来发送事件发生的通知。 python-mpdor中的MPDProtocolClient类派生自GObject,因此它可以发射信号。应用程序将函数“连接”到这些信号。
例如,README显示了以下示例:
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()
在这种情况下,名为
notify
的函数与
"mixer-change"
信号"连接",这意味着每当客户端"发射"该信号时,该函数将被调用。
gobject.MainLoop().run()
调用进入一个"
主事件循环"(基本上是一个无限循环),这是事件驱动编程中的标准概念。
你可能找不到太多关于GObject/Python的教程,但如果你学习一些Python/GTK+基础知识,那么你很可能能够掌握事件循环、信号和信号回调的概念。(看起来python-mpdor正在使用GTK+ 2,这将是PyGTK,而不是较新的GTK+ 3,即PyGObject)。
祝好运。