我很难理解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?
谢谢
答案 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绑定。我不知道他们是否可以混合,但你的结果似乎表明他们不能混合。