Понимание gi.repository - PullRequest
       3

Понимание gi.repository

12 голосов
/ 13 ноября 2011

У меня проблемы с пониманием 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 ]

13 голосов
/ 14 января 2012

Похоже, что поддержка Gtk3 была добавлена ​​недавно . Я думаю, что это займет некоторое время, пока оно не станет доступно в основных дистрибутивах.

Лучшим решением будет загрузить и установить последнюю версию.

В качестве обходного пути, чтобы избежать установки чего-либо в моем Ubuntu 11.10, у меня есть загруженные файлы backend_gtk3.py и backend_gtk3agg.py и импортированные напрямую как:

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.

6 голосов
/ 13 ноября 2011

Это очень хороший вопрос.Боюсь, что ответ может быть «ты не можешь».Бэкэнд Matplotlib GTK написан для PyGTK, привязок Python старого стиля для GTK.Пакет gi.repository представляет собой привязки Python нового стиля.Я не знаю, так или иначе, могут ли они смешиваться или нет, но ваши результаты показывают, что они не могут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...