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


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


Далее, указываю необходимую информацию для контекстного меню (popup menu):

def init_ppmenu(self): """Create popup menu""" self.ppmenu_xml = """ <popup name="button3">

<menuitem name="About Item" verb="About" stockid="gtk-about" /> </popup> """

self.ppmenu_verbs = [ ("About", self.on_ppm_about), ]

Заметьте, что в XML-описании пункта меню "О программе" нет собственно названия пункта, а лишь его StockID. Это сделано по той простой причине, что пункт меню "О программе" стандартен для большинства приложений и в случае указания StockID Вы получаете:

  • стандартную иконку для данного пункта (причем, с изменением темы оформления GNOME эта иконка может меняться)

  • стандартное название пункта меню, причем автоматически переведенное на нужный язык

Каждый пункт меню имеет "глагол"-действие, который ставится ему в соответствие. self.ppmenu_verbs же задает соответствие между "глаголом"-действием и callback-функцией.

Следующий шаг по созданию апплета - "соединение" callback-функций и событий:

def __connect_events(self): """Connect applet's events to callbacks""" self.ev_box.connect("button-press-event", self.on_button) self.ev_box.connect("enter-notify-event", self.on_enter) self.button_actions = { 1: lambda: None, 2: lambda: None, 3: self._show_ppmenu, }

Еще раз отмечу, что апплет - безоконный виджет, поэтому все события генерирует ev_box. В данном случае, я соединил события "нажатие на кнопку" с callback-функцией self.on_button и событие "попадание курсора в область виджета" с callback-функцией self.on_enter. Здесь же при помощи словаря self.button_actions задал соответствие между кнопками мыши и функциями-действиями. Стоит заметить, что callback-функции, соединенные с событиями, должны быть определенной сигнатуры (об этом чуть позже), а функции-действия не должны принимать ни один параметр.




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