GLib 和 GObject 到底是啥?

Posted

技术标签:

【中文标题】GLib 和 GObject 到底是啥?【英文标题】:What exactly are GLib and GObject?GLib 和 GObject 到底是什么? 【发布时间】:2012-07-03 07:18:05 【问题描述】:

我一直在研究python-mpdor的源代码,它提到它是

基于gobject,便于事件处理(在高级客户端中 类)。

谁能用简单的术语向我解释一下GlibGObject 到底是什么以及它们如何相互交互以及它在事件处理中扮演什么角色。

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

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

【问题讨论】:

【参考方案1】:

GLib 和 GOBject 是构建 GTK+ GUI 工具包的 2 个独立的 C 库(除其他外)。

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

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

所有基于 GObject 的库都旨在支持与 Python 等其他语言的语言绑定。

就您的问题而言,GObject 提供了一个称为“信号”的事件系统。任何从 GObject 派生的对象都可以“发出”信号来发送事件发生的通知。 python-mpdor 中的 MPDProtocolClient 类是从 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)。

祝你好运。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于GLib 和 GObject 到底是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何对使用 G_DECLARE_DERIVABLE_TYPE (glib/gobject) 定义的类进行子类化

python gobject.mainloop 吞噬信号事件

Vala 可以在没有 GObject 的情况下使用吗?

无法在 debian 拉伸上构建 gobject--introspection-1.70.0

如何控制 glib 中调试信息的级别?

GLib 中的 GRefString 实现是啥?