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


Внешний вид - часть 3


Ну и неплохо было бы изменить диалог "О программе", переопределив on_ppm_about.

def after_init(self): """Init additional attributes of applet""" self.proxy = ProxyGconfClient(callback=self._cb_proxy_change) self.proxy_state = self.proxy.get_state() self.proxy_is_on = self.proxy.is_on() self.set_visual_state(self.proxy_state, self.proxy_is_on) self.button_actions[1] = self.switch_proxy

Метод after_init повторяет таковой у класса ProxyGnomeApplet за небольшими изменениями: дополнительно в атрибут proxy_is_on записываем данные, включен ли прокси; визуальное состояние апплета устанавливается методом set_visual_state.

def set_visual_state(self, state, is_on): """Set overall visual state for corresponding proxy's state""" msg_on_state = u"Proxy is on" msg_off_state = u"Proxy is off" mode = u"mode: %s" % state variant = (is_on and msg_on_state) or msg_off_state self.info = u"%s (%s)" % (variant, mode) self._set_image(is_on)

def _set_image(self, kind): """Set image for specified state"""

self.image.set_from_pixbuf(self.pixbufs[kind])

Здесь код незамысловат: в начале формируются строки всплывающей подсказки, в зависимости от значения параметра is_on выбирается текст "Proxy is on" или "Proxy is off". Дополнительно, в скобках отображается режим (параметр state). Последняя строка - установка соответствующего значка (метод _set_image). Ну а в методе _set_image - заполнение контейнера gtk.Image данными из пиксельного буфера. Какой пиксельный буфер (из двух, что хранятся в self.pixbufs) использовать, определяет переданный параметр kind.

Следующая пара методов, которые нужно переопределить, это _cb_proxy_change и on_enter - callback-функции на переключение прокси и на попадание указателя мыши в апплет. Тут очень просто и понятно:

def _cb_proxy_change(self, client, cnxn_id, entry, params): """Callback for changing proxy, change visual state of applet""" self.proxy_state = self.proxy.get_state() self.proxy_is_on = self.proxy.is_on() self.set_visual_state(self.proxy_state, self.proxy_is_on)




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