在 Python 中封装 GObject
2007-03-29 12:14:54 来源:WEB开发网如果我们现在运行 make trayicon.c ,然后查看已生成的文件,那么我们会看到 C 代码包装 EggTrayIcon 中的每个函数。不必担心警告 No ArgType for GdkScreen*— 这是正常的。
正如您所看到的那样,封装代码看上去复杂,所以我们感谢代码生成器为我们编写的每一行。稍后,我们将学习当想要调优封装时如何手工封装各个方法,而我们自己不必编写所有包装器。
创建模块
既然已经创建了包装器的代码块,那么就需要一个启动它的方法。这涉及创建 trayiconmodule.c,该文件可被视为 Python 模块的 main() 函数。该文件是样板文件代码(与覆盖文件相似),我们对它稍作修改。下面是我们将使用的 trayiconmodule.c:
清单 3. TrayIcon 模块代码#include <pygobject.h>
void trayicon_register_classes (PyObject *d);
extern PyMethodDef trayicon_functions[];
DL_EXPORT(void)
inittrayicon(void)
{
PyObject *m, *d;
init_pygobject ();
m = Py_InitModule ("trayicon", trayicon_functions);
d = PyModule_GetDict (m);
trayicon_register_classes (d);
if (PyErr_Occurred ()) {
Py_FatalError ("can't initialise module trayicon");
}
}
这里需要说明一下一些细微的区别,因为有多个使用单词 trayicon 的源代码。函数 inittrayicon 的名称和初始化模块的名称是 Python 模块的真实名称,因此是最终共享对象的名称。数组 trayicon_functions 和函数 trayicon_register_classes 是根据代码生成器的 --prefix 参数命名的。正如前面所提到的那样,最好使这些名称保持一致,以便编码该文件不会变得很混乱。
更多精彩
赞助商链接