Создание апплета GNOME


Скелет апплета - часть 3


Следующий по порядку вызов - это метод after_init. В скелете он пустой, предназначен специально для переопределения в потомках.

С этапами создания апплета вроде завершил, остались callback-функции… Я не буду пересказывать PyGTK reference, лишь перечислю типы callback-функций и их сигнатуры, которые встречаются у меня:

  • callback-функция на событие destroy апплета. Сигнатура function(event). Реализация - _cleanup

  • callback-функция на события ev_box. Сигнатура function(widget, event). Реализации - on_enter, on_button

  • callback-функция на пункт меню. Сигнатура function(event, data=None). Реализация - on_ppm_about

  • функция-действие (мое название) на нажатие одной из кнопок мыши. Сигнатура function(). Реализация - _show_ppmenu.

Содержимое callback-функции _cleanup не буду приводить - оно слишком тривиально (удаляется объект self.applet) для того, чтобы занимать место, а кому интересно - гляньте в полном исходном тексте апплета. Что касается остальных callback-функций, я их приведу и прокомментирую, поскольку они все же представляют интерес. def on_button(self, widget, event): """Action on pressing button in applet"""

if event.type == gtk.gdk.BUTTON_PRESS: self.button_actions[event.button]()

Callback-функция on_button вызывается при нажатии любой кнопки мыши внутри виджета. И внутри этой функции я, во-первых, убеждаюсь, что присоединили к правильному событию (нажатию на клавишу), а, во-вторых, вызываю нужную функцию-действие, выбирая (в event.button хранится номер кнопки, нажатие на которую и вызвало появление данного события) из ранее описанного словаря self.button_actions. Для кнопок 1 и 2 у меня пустые действия, для 3 - контекстное меню. Показ контекстного меню - специальный метод класса Applet - setup_menu. Первый аргумент - XML-описание меню, второй - "глаголы"-действия, третий - пользовательские данные (передаются третьим параметром в callback-функцию).

def _show_ppmenu(self): """Show popup menu""" self.applet.setup_menu(self.ppmenu_xml, self.ppmenu_verbs, None)




- Начало -  - Назад -  - Вперед -