在 Python 中封装 GObject
2007-03-29 12:14:54 来源:WEB开发网核心提示: 调优界面到目前为止,我们已经有了 send_message(int timeout, char *message, int length) 函数,在 Python 中封装 GObject(9),如果 EggTrayIcon 的 Python API 允许我们调用 send_message(
调优界面
到目前为止,我们已经有了 send_message(int timeout, char *message, int length) 函数。如果 EggTrayIcon 的 Python API 允许我们调用 send_message(timeout, message) ,那会更好。幸运的是,这并不太难。
完成这一步将再次涉及编辑 trayicon.override。这正是文件名的意义所在:该文件主要包含手工覆盖的包装器函数。比起演示一个示例并逐步说明其内容来,说明这些函数的工作原理要难得多,所以下面是手工封装的 send_message 代码。
清单 7. 手工覆盖
override egg_tray_icon_send_message kwargs
static PyObject*
_wrap_egg_tray_icon_send_message(PyGObject *self,
PyObject *args, PyObject *kwargs)
{
static char *kwlist[] = {"timeout", "message", NULL};
int timeout, len, ret;
char *message;
if (!PyArg_ParseTupleAndKeywords(args, kwargs,
"is#:TrayIcon.send_message", kwlist,
&timeout, &message, &len))
return NULL;
ret = egg_tray_icon_send_message(EGG_TRAY_ICON(self->obj),
timeout, message, len);
return PyInt_FromLong(ret);
}
为了清晰起见,我们再次将该清单逐行细化:
override egg_tray_icon_send_message kwargs
该行告诉代码生成器我们将提供 egg_tray_icon_send_message 的手工定义,它本身应该不会生成一个定义。
更多精彩
赞助商链接