Python 理解gi.repository

Python 理解gi.repository,python,gtk,matplotlib,Python,Gtk,Matplotlib,我理解gi有困难 我在代码中使用这种构造 from gi.repository import Gtk 但如果我想使用一些组件,我会得到导入错误 我搜索了一些组件,比如GtkSource、Vte、GLib 所以我的代码是 from gi.repository import Gtk, GtkSource, Vte, GLib 一切都很好,但如果我想添加matplotlib在画布上绘制,我会得到一个错误 enter code/usr/lib64/python2.7/site-package

我理解gi有困难

我在代码中使用这种构造

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一起工作


谢谢你,这是一个很好的问题。我担心答案可能是“你不能”。Matplotlib的GTK后端是为PyGTK编写的,PyGTK是用于GTK的旧式Python绑定。repository包是新样式的Python绑定。我不知道它们是否可以混合,但你的结果似乎表明它们不能混合。

对Gtk3的支持似乎已经过时了。我想这需要一些时间,直到它在主要发行版中可用

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

为了避免在我的Ubuntu11.10中安装东西,我采用了以下方法直接导入:

from gi.repository import Gtk

from matplotlib.figure import Figure
from backend_gtk3agg import FigureCanvasGTK3Agg as FigCanvas
我不得不更改后端gtk3agg.py第6行,其中显示:

import backend_agg

,因此它可以从我的安装中导入模块。
到目前为止,它对我有效,但我知道此解决方案不能与不同版本的matplotlib一起使用。

11个月前,一个带有较新的gi.repository导入的GTK3后端被合并到github中:我不确定哪个版本有此功能,也不确定如何准确地调用它,但它应该兼容。。。不幸的是,正如我最近发现的,您不能在同一个应用程序中同时使用两个导入,它会崩溃(分段错误)。您好,您是说您刚刚下载了两个文件?我正在尝试这个例子:使用你解释的程序,但它不起作用。请你再详细一点好吗。您是否使用本地matplotlib安装中的Figure?
from matplotlib.backends import backend_agg