WEB开发网
开发学院软件开发Python 在 Python 中封装 GObject 阅读

在 Python 中封装 GObject

 2007-03-29 12:14:54 来源:WEB开发网   
核心提示: 如果我们现在运行 make trayicon.c ,然后查看已生成的文件,在 Python 中封装 GObject(5),那么我们会看到 C 代码包装 EggTrayIcon 中的每个函数,不必担心警告 No ArgType for GdkScreen*— 这是正常的,正如前面

如果我们现在运行 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 参数命名的。正如前面所提到的那样,最好使这些名称保持一致,以便编码该文件不会变得很混乱。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:Python 封装 GObject

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接