GLib和GObject分别是什么?

41

我一直在研究 python-mpdor 的源代码,并发现其中提到它是基于 GObject 构建的,以便在高级客户端类中轻松处理事件。

GObject 是基于 Glib 的,用于轻松处理事件(在高级客户端类中)。

能否有人简单明了地解释一下 GObject 和 Glib 到底是什么,它们如何相互交互,以及在事件处理中扮演了什么角色。

我尝试搜索 Glib 和 GObject,但没有找到任何关于它们的基础说明。我找到的所有说明都非常技术化,而且对于初学者来说不太适合。

此外,有人能指向一些针对初学者的 Glib 和 GObject 教程/文章吗?

2个回答

58

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)。
祝好运。

2
GObject是COM(Component Object Model)的一种实现方式。这意味着您可以调用该对象的“方法”——信号,而无需在头文件中“包含”方法声明和链接。 最初它被创建为一种用于创建不同PL的语言绑定的系统,但它也被用作插件系统的基础。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接