GLib和GObject究竟是什么?

时间:2012-07-02 20:57:29

标签: glib pygobject gobject

我一直在查看python-mpdor的源代码,并提到它是

  

基于gobject,用于简单的事件处理(在高级客户端中)   类)。

有人可以用简单的术语向我解释究竟是什么GlibGObject以及它们如何相互作用以及它在事件处理中扮演的角色。< / p>

我尝试搜索GlibGObject,但我没有找到任何基本的解释。我发现的所有解释都非常技术性,而且技术上我的意思是不适合初学者。

此外,有人可以指向一些关于GlibGObject初学者教程/文章。

2 个答案:

答案 0 :(得分:34)

GLib和GOBject是两个独立的C库,其中构建了GTK + GUI工具包(以及其他内容)。

由于C是一种低级语言,因此GLib提供了许多基本功能,例如类似于Python内置的实用程序(文件输入/输出,字符串操作,内存管理,线程等)。

由于C不是面向对象的语言,因此GObject提供了一个基于C的对象系统,其中包括属性和继承(同样,已经内置到Python中)。在Python中,你很少直接使用GLib(因为Python内置了大部分功能),但GObject依赖于GLib。

所有基于GObject的库都支持与其他语言(如Python)的语言绑定。

就你的问题而言,GObject提供了一个称为“信号”的事件系统。从GObject派生的任何对象都可以“发出”信号以发送事件发生的通知。 MPDProtocolClient中的python-mpdor类派生自GObject,因此它可以发出信号。应用程序将这些信号“连接”到这些信号˚F

例如,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()调用进入“main event loop”(基本上是无限循环),这是事件驱动编程中的标准概念。

你可能找不到很多GObject / Python教程,但是,如果你学习了一些Python / GTK +基础知识,那么你很可能会掌握事件循环,信号和信号的概念。回调。 (看起来python-mpdor使用的是GTK + 2,它是PyGTK而不是更新的GTK + 3,即PyGObject)。

祝你好运。

答案 1 :(得分:2)

GObject是COM-组件对象模型的实现。这意味着您可以调用此对象的“方法”-在头文件和链接中没有“包括”方法声明的信号。 最初,它是作为为不同PL创建语言绑定的系统而创建的,但它也被用作插件系统的基础