Написание апплетов MATE/GNOME (Python) с помощью самоанализа PyGObject

Поэтому я пытался перенести апплет C GNOME на MATE, и, столкнувшись с множеством различных проблем, я решил переписать его с нуля на python. В конце концов, я нашел не очень устарелую документацию, которая находится здесь: http://wiki.mate-desktop.org/docs:devel:mate-panel

По-видимому, новый способ написания апплетов в python - это использование самоанализа PyGObject вместо "старого" PyGtk.

Итак, у меня есть несколько вопросов:

1. Why is it better to use PyGObject instead of PyGtk etc
2. Is the end user who downloads a python applet expected to have pygobject installed? It looks like it.
3. The MATE documentation says 'ensure we are using Gtk 2, not Gtk3', but http://python-gtk-3-tutorial.readthedocs.org/en/latest/install.html says that its exclusively supports Gtk+ 3 and higher.

РЕДАКТИРОВАТЬ: Если я бегу

import gi
gi.require_version("Gtk", "2.0")

в сеансе Python я получаю предупреждение:

RuntimeWarning: You have imported the Gtk 2.0 module.  Because Gtk 2.0 was not designed for use with introspection some of the interfaces and API will fail.  As such this is not supported by the pygobject development team and we encourage you to port your app to Gtk 3 or greater. PyGTK is the recomended python module to use with Gtk 2.0

Который в значительной степени отвечает на вопрос 3, но затем снова поднимает вопрос 1. Кроме того, работает from gi.repository import MatePanelApplet выдает ошибку ImportError Could not find any typelib for MatePanelApplet хотя у меня установлен libmatepanelapplet-dev.

ВНОВЬ РЕДАКТИРОВАТЬ: Я нашел решение ImportError здесь: Не могу импортировать Webkit из gi.repository. (Просто установите gir1.2-mate-panel вместо вебкита)

И еще ошибки:

./xmonad-log-applet.py:66: Warning: g_closure_set_marshal: assertion `closure != NULL' failed
  applet = MatePanelApplet.Applet()

(xmonad-log-applet.py:10928): GLib-GIO-CRITICAL **: g_dbus_connection_register_object: assertion `G_IS_DBUS_CONNECTION (connection)' failed
Segmentation fault (core dumped)

1 ответ

Решение

MATE - это форк GNOME 2, поэтому вы должны использовать PyGTK (как сообщение, которое вы получили).

По каждому вопросу:

  1. PyGObject лучше, потому что вам нужна только одна привязка к библиотеке (та, которая обеспечивает самоанализ), и вы получаете автоматический доступ к общедоступному API каждой библиотеки, которая поддерживает GOBject Introspection. Для разработчиков это хорошо, потому что они имеют доступ к тому же API, что и C, не ожидая привязок для каждого нового выпуска.

  2. Да. Но пользователь, скорее всего, будет. Шансы GNOME 3 равны 100%, а GNOME 2 (MATE) меньше, потому что это не требуется.

  3. Это не похоже на вопрос. Как я уже говорил ранее, MATE предназначен для GNOME 2, поэтому вы должны использовать библиотеки и документацию, доступные для GNOME 2.

Вы можете проверить апплеты, которые были написаны для GNOME 2 в Python (после того, как GNOME отбросил Bonobo). Например, hasmter. Возможно, вам придется изменить некоторые имена, вероятно, в MATE переименовали имена библиотек из GNOME в MATE.

Другие вопросы по тегам