了解gi.repository

时间:2011-11-13 05:27:39

标签: python gtk matplotlib

我很难理解gi.repository

我在代码

中使用此构造
from gi.repository import Gtk

但如果我想使用某些组件,我会收到导入错误

我搜索过,我得到了一些组件,比如GtkSource,Vte,GLib,......

所以我的代码就像

from gi.repository import Gtk, GtkSource, Vte, GLib

一切正常,但如果我想添加matplotlib在我的画布上画画我得到并且错误

    enter code/usr/lib64/python2.7/site-packages/gtk-2.0/gtk/__init__.py:40: Warning: specified class size for type `PyGtkGenericCellRenderer' is smaller than the parent type's `GtkCellRenderer' class size
  from gtk import _gtk
/usr/lib64/python2.7/site-packages/gtk-2.0/gtk/__init__.py:40: Warning: g_type_get_qdata: assertion `node != NULL' failed
  from gtk import _gtk
/usr/lib64/python2.7/site-packages/gtk-2.0/gtk/__init__.py:40: Warning: g_ascii_strncasecmp: assertion `s2 != NULL' failed
  from gtk import _gtk
Segmentation fault (core dumped) here

如何让matplotlib使用gi.repository?

谢谢

2 个答案:

答案 0 :(得分:13)

似乎对Gtk3的支持是added recently。我想它需要一些时间,直到它在主要发行版中可用。

最好的解决方案是下载并安装最新版本。

作为避免在我的Ubuntu 11.10中安装内容的解决方法,我有dowloaded backend_gtk3.py and backend_gtk3agg.py files并直接导入,如:

from gi.repository import Gtk

from matplotlib.figure import Figure
from backend_gtk3agg import FigureCanvasGTK3Agg as FigCanvas

我不得不更改backend_gtk3agg.py第6行,其中包含:

import backend_agg

from matplotlib.backends import backend_agg

,所以它可以从我的安装中导入模块。 到目前为止它对我有用,但我知道这个解决方案不适用于不同版本的matplotlib。

答案 1 :(得分:6)

这是一个非常好的问题。我担心答案可能是“你做不到”。 Matplotlib的GTK后端是为PyGTK编写的,这是GTK的旧式Python绑定。 gi.repository包是新式的Python绑定。我不知道他们是否可以混合,但你的结果似乎表明他们不能混合。