07.02.2011 15:16

sagodПишем Indicator Applet для GNOME

В статье описывается процесс создания апплета-индикатора для GNOME.

=amazing applet

Известно, что большинство апплетов для GNOME написаны на C, чем достигается некоторое преемущество в скорости работы перед программами на Perl/Python.
С другой стороны, писать на C сложнее, поэтому работать будем с Python.

Первым делом, нужно подключить библиотеку appindicator:

1
import appindicator


Затем создаем объект класса Indicator с тремя параметрами:1 - уникальный идентификатор приложения
2 - тип значка
3 - категория, указывающая на положение вашей программы на панели GNOME

Всего выбирать можно из 5 вариантов:CATEGORY_APPLICATION_STATUS
CATEGORY_COMMUNICATIONS
CATEGORY_SYSTEM_SERVICES
CATEGORY_HARDWARE
CATEGORY_OTHER
Нам подойдет первый:

1
indicator = appindicator.Indicator("amazing-applet", "indicator-messages", appindicator.CATEGORY_APPLICATION_STATUS)



Теперь установим статус индикатору: STATUS_ACTIVE - иконка отображена
STATUS_PASSIVE - иконка спрятана
STATUS_ATTENTION - иконка в состоянии привлечении внимания пользователя
1
indicator.set_status(appindicator.STATUS_ACTIVE)



Также добавим графические иконки для обоих состояний индикатора (активного и того, который привлекает внимание):
1
2
indicator.set_attention_icon(indicator_icon)
indicator.set_icon(indicator_icon)


В переменной indicator_icon хранится путь до графического файла.

Не секрет, что у каждого апплета есть меню. И у нашего будет. Подключаем pygtk и gtk и создаем объект класса gtk:
1
menu = gtk.Menu()


Пункты создаются и добавляются следующим образом:
1
2
item = gtk.MenuItem("Item name")
menu.append(item)


Отслеживаем нажатие на выбранный пункт меню так:
1
item.connect("activate", foo)



После того как меню сформировано, добавляем его к апплету:
1
indicator.set_menu(menu)



Отлично, у нас уже есть хоть и бесполезное, но работающее приложение (засмотреть код).

Теперь сделаем возможность отправки сообщений в notify.
Добавляем новый пункт в меню и описываем действия, которые будут выполняться по нажатию:
1
2
3
4
5
icon = 'file://' + indicator_icon
title = 'Amazing Applet'
text = 'Hello! I'm your first indicator applet.'
notif = pynotify.Notification(title, text, icon);
notif.show()



Да, для работы pynotify надо подключить... pynotify.
Готово!
Смотрим что получилось у вас, сравниваем с моим кодом, ищем ошибки, пишем в комментариях вопросы.


Тэги: applet gnome python ubuntu
+ 21 -
Похожие Поделиться

nikebl 07.02.2011 16:36 #
Люблю пайтон конечно, но все равно велосипед, однако.
notify-send -i=/path/to/icon SUBJ MESSAGE
nikebl 07.02.2011 16:38 #
пардон если был не прав, эта штука постоянно висит что ли? ( в отличие от libnotify?)
wiz 07.02.2011 17:44 #
ага, заметил только знакомые слова из поста (=

индикаторы и уведомления вообще никак не связаны. это скорее иконки-в-трее-где-часы™
sagod 07.02.2011 18:12 #
именно так :)
перключение раскладки, пиджин, дропбокс, сообщения (значки на панели GNOME) - все это апплеты-индикаторы.
sagod 07.02.2011 18:10 #
Почему же велосипед?
Ваш пример никак не связан с Indicator Applet.
VovanR 08.02.2011 00:19 #
На самом деле глядя на скриншот к теме кажется, что речь будет идти именно об всплывающем нотификаторе=)
До меня тоже не сразу дошло что статья про апплет-индикатор, что куда интересней.
Спасибо за статью.