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


Скелет апплета


Перво-наперво, выделю то, что необходимо для функционирования любого апплета, вне зависимости от его природы:

  • некий виджет-контейнер (например, HBox)

  • некий "полезный" виджет (у меня это будет Label)

  • всплывающая подсказка

  • некое действие по левой кнопки мыши

  • контекстное меню

  • возможность запуска как отдельного приложения (для отладки)

  • регистрация в GNOME как апплета к панели

Займемся реализацией:

import sys import gtk import gtk.gdk import gnome.ui import gnomeapplet

class GnomeAppletSkeleton(gnomeapplet.Applet): """Simple applet skeleton"""

def __init__(self, applet): """Create applet"""

self.applet = applet self.__init_core_widgets() self.init_additional_widgets() self.init_ppmenu() self.__connect_events() self.applet.connect("destroy", self._cleanup) self.after_init() self.applet.show_all()

Прежде чем приступить к пояснениям, скажу о конвенции насчет имен методов. Если имя метод начинается с двух подчеркиваний, то перегружать (переопределять) такой метод нежелательно. Если же имя метода начинается с буквы, то такой метод можно практически безболезненно перегружать. Но все же, если Вы будете писать свой апплет, то все же гляньте код соответствующего метода GnomeAppletSkeleton прежде чем перегружать его.

Итак, первым делом инициализирую ключевые виджеты, без которых не обойдется ни один апплет:

def __init_core_widgets(self): """Create internal widgets""" self.tooltips = gtk.Tooltips() self.hbox = gtk.HBox() self.ev_box = gtk.EventBox() self.applet.add(self.hbox) self.hbox.add(self.ev_box)

Поскольку апплет - безоконный виджет (у него нет окна), то для того, чтобы была возможность реагировать на события, я помещаю EventBox в него. А уж все дополнительные виджеты (в моем случае это будет только Label) добавляются к ev_box.

def init_additional_widgets(self): """Create additional widgets""" self.label = gtk.Label("Dummy") self.ev_box.add(self.label)




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