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


Заполнение скелета


Собственно для реализации работающего апплета почти всё готово: скелет апплета, объект-переключатель -

class ProxyGnomeApplet(GnomeAppletSkeleton):

def after_init(self): self.proxy = ProxyGconfClient(callback=self._cb_proxy_change) self.proxy_state = self.proxy.get_state() self.button_actions[1] = self.switch_proxy self.label.set_text(self.proxy_state)

def _cb_proxy_change(self, client, cnxn_id, entry, params): """Callback for changing proxy""" self.proxy_state = self.proxy.get_state() self.label.set_text(self.proxy_state)

def on_enter(self, widget, event): info = "Proxy mode: %s" % self.proxy_state self.tooltips.set_tip(self.ev_box, info)

def switch_proxy(self): if self.proxy.is_on(): self.proxy.off() else: self.proxy.on()

Поясняю написанное:

Во-первых, напоминаю, что after_init специально создавался в скелете для переопределения в потомках, так что это правильное место для добавления прокси-переключателя (атрибут proxy), определения действия на левую кнопку мыши (button_actions[1]) и установки начального текста для label.

Во-вторых, в качестве callback-функции, которая выполняется при смене состояния ключа GConf, я использую _cb_proxy_change (сигнатура этой функции такова: GConf-клиент, идентификатор соединения, измененный ключ, дополнительные параметры). По идее, идеологически более правильно здесь использовать конструкцию entry.get_value().get_string(), но мне не нравится такой стиль записи, он не Pythonic. Поэтому я использую информацию от объекта прокси-переключателя.

Далее, переопределенная callback-функция on_enter, теперь она показывает состояние прокси, а не просто "Привет мир".

Ну и последний метод - switch_proxy - выполняется по нажатию левой кнопки, переключает состояние прокси.

Действия по регистрации этого, уже работающего, апплета абсолютно аналогичны таковым для скелета, так что я не описываю их. Рабочий код можете взять отсюда.

Фактически, апплет уже функционирует, однако выглядит он не притязательно. В следующей части буду "шлифовать" внешний вид.




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