我一直在研究python-mpdor的源代码,它提到它是
有人可以简单地向我解释Glib
和GObject
到底是什么,它们如何相互影响以及它在事件处理中起什么作用。
我尝试搜索Glib
和GObject
,但没有找到任何基本说明。我发现的所有解释都是非常技术性的,从技术上来说,我的意思是不适合初学者。
另外,有人可以指向有关Glib
和GObject
的一些初学者教程/文章。
最佳答案
GLib和GOBject是2个单独的C库,从中构建了GTK + GUI工具包(除其他外)。
由于C是较低级的语言,因此GLib提供了许多基本功能,例如类似于Python内置的实用程序(文件输入/输出,字符串处理,内存管理,线程处理等)。
由于C不是一种面向对象的语言,因此GObject提供了一个基于C的对象系统,该系统包括属性和继承(同样,已经内置在Python中)。在Python中,您很少直接使用GLib(因为Python内置了大部分功能),但是GObject依赖于GLib。
所有基于GObject的库都旨在支持与其他语言(例如Python)的语言绑定(bind)。
就您的问题而言,GObject提供了一个称为“信号”的事件系统。从GObject派生的任何对象都可以“发出”信号以发送事件发生的通知。 MPDProtocolClient
中的python-mpdor
类是从GObject派生的,因此可以发出信号。应用程序“连接”功能到这些信号。 F
例如,自述文件显示了以下示例:
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()
调用输入“main event loop”(基本上是一个无限循环),它是事件驱动编程中的标准概念。您可能不会找到很多GObject / Python教程,但是,如果您学习了一些Python / GTK +基础知识,则可能会掌握事件循环,信号和信号回调的概念。 (看起来python-mpdor正在使用GTK + 2,它将是PyGTK,而不是较新的GTK + 3,即PyGObject)。
祝好运。