sagod — Пишем Indicator Applet для GNOME
В статье описывается процесс создания апплета-индикатора для GNOME.
Известно, что большинство апплетов для GNOME написаны на C, чем достигается некоторое преемущество в скорости работы перед программами на Perl/Python.
С другой стороны, писать на C сложнее, поэтому работать будем с Python.
Первым делом, нужно подключить библиотеку appindicator:
Затем создаем объект класса Indicator с тремя параметрами:
Теперь установим статус индикатору:
Также добавим графические иконки для обоих состояний индикатора (активного и того, который привлекает внимание):
В переменной indicator_icon хранится путь до графического файла.
Не секрет, что у каждого апплета есть меню. И у нашего будет. Подключаем pygtk и gtk и создаем объект класса gtk:
Пункты создаются и добавляются следующим образом:
Отслеживаем нажатие на выбранный пункт меню так:
После того как меню сформировано, добавляем его к апплету:
Отлично, у нас уже есть хоть и бесполезное, но работающее приложение (засмотреть код).
Теперь сделаем возможность отправки сообщений в notify.
Добавляем новый пункт в меню и описываем действия, которые будут выполняться по нажатию:
Да, для работы pynotify надо подключить... pynotify.
Готово!
Смотрим что получилось у вас, сравниваем с моим кодом, ищем ошибки, пишем в комментариях вопросы.
Известно, что большинство апплетов для GNOME написаны на C, чем достигается некоторое преемущество в скорости работы перед программами на Perl/Python.
С другой стороны, писать на C сложнее, поэтому работать будем с Python.
Первым делом, нужно подключить библиотеку appindicator:
import appindicator
Затем создаем объект класса Indicator с тремя параметрами:
- 1 - уникальный идентификатор приложения
- 2 - тип значка
- 3 - категория, указывающая на положение вашей программы на панели GNOME
Всего выбирать можно из 5 вариантов:- CATEGORY_APPLICATION_STATUS
- CATEGORY_COMMUNICATIONS
- CATEGORY_SYSTEM_SERVICES
- CATEGORY_HARDWARE
- CATEGORY_OTHER
Нам подойдет первый:
- CATEGORY_APPLICATION_STATUS
indicator = appindicator.Indicator("amazing-applet", "indicator-messages", appindicator.CATEGORY_APPLICATION_STATUS)
Теперь установим статус индикатору:
- STATUS_ACTIVE - иконка отображена
- STATUS_PASSIVE - иконка спрятана
- STATUS_ATTENTION - иконка в состоянии привлечении внимания пользователя
indicator.set_status(appindicator.STATUS_ACTIVE)
Также добавим графические иконки для обоих состояний индикатора (активного и того, который привлекает внимание):
1 2 |
indicator.set_attention_icon(indicator_icon) |
В переменной indicator_icon хранится путь до графического файла.
Не секрет, что у каждого апплета есть меню. И у нашего будет. Подключаем pygtk и gtk и создаем объект класса gtk:
menu = gtk.Menu()
Пункты создаются и добавляются следующим образом:
1 2 |
item = gtk.MenuItem("Item name") |
Отслеживаем нажатие на выбранный пункт меню так:
item.connect("activate", foo)
После того как меню сформировано, добавляем его к апплету:
indicator.set_menu(menu)
Отлично, у нас уже есть хоть и бесполезное, но работающее приложение (засмотреть код).
Теперь сделаем возможность отправки сообщений в notify.
Добавляем новый пункт в меню и описываем действия, которые будут выполняться по нажатию:
1 2 3 4 5 |
icon = 'file://' + indicator_icon |
Да, для работы pynotify надо подключить... pynotify.
Готово!
Смотрим что получилось у вас, сравниваем с моим кодом, ищем ошибки, пишем в комментариях вопросы.