在 Python 中封装 GObject
2007-03-29 12:14:54 来源:WEB开发网核心提示: 生成包装器既然我们有了界面定义,那么就可以生成 Python 包装器的代码块,在 Python 中封装 GObject(3),这包括生成一个覆盖文件,覆盖文件告诉代码生成器要包括哪些头文件、模块名将是什么等等,Python 替我们处理了类型代码,因此我们忽略 *_get_type 函数;否
生成包装器
既然我们有了界面定义,那么就可以生成 Python 包装器的代码块。这包括生成一个覆盖文件。覆盖文件告诉代码生成器要包括哪些头文件、模块名将是什么等等。
通过使用 %% 将覆盖文件分成多个节(以 lex/yacc 样式)。这些节定义要包括哪些头文件、模块名、要包括哪些 Python 模块、要忽略哪些函数以及最后所有手工封装的函数。下面是 trayicon 模块的初始覆盖文件。
清单 1. trayicon.override
%%
headers
#include <Python.h>
#include "pygobject.h"
#include "eggtrayicon.h"
%%
modulename trayicon
%%
import gtk.Plug as PyGtkPlug_Type
%%
ignore-glob
*_get_type
%%
让我们再次更详细地检查该代码:
headers
#include <Python.h>
#include "pygobject.h"
#include "eggtrayicon.h"
这些是在构建包装器时要包括的头文件。始终必需包括 Python.h 和 pygobject.h,当我们封装 eggtrayicon.h 时,我们也必需包括它们。
modulename trayicon
modulename 规范声明包装器将在什么模块中。
import gtk.Plug as PyGtkPlug_Type
这些是用于包装器的 Python 导入。请注意命名约定;对于要编译的模块,必须遵守它。通常,导入对象的超类就足够了。例如,如果对象直接从 GObject 继承,则使用:
import gobject.GObject as PyGObject_Type
ignore-glob
*_get_type
这是一个要忽略的函数名的 glob 模式(shell 样式的正则表达式)。Python 替我们处理了类型代码,因此我们忽略 *_get_type 函数;否则,将对它们进行封装。
更多精彩
赞助商链接