В предыдущей статье мы сделали консольный вывод суммы балансов в Setlinks, Sape и Linkfeed, используем его для нашего апплета. В ранее созданной папке ~/exemple/ создадим файл BalansApplet.py:
#!/usr/bin/env python # coding=utf-8 import sys, os, gtk, gtk.gdk, pygtk, gnomeapplet, gnome import gobject pygtk.require('2.0') class MyApplet (gnomeapplet.Applet): def __init__ (self, applet, iid): # Applet as a gboject self.__gobject_init__() self.applet = applet self.applet.set_name('MyApplet') self.hbox = gtk.HBox() self.applet.add(self.hbox) self.event = gtk.EventBox() self.hbox.add(self.event) self.info = gtk.Label() self.update_text() self.event.add(self.info) # Чтобы объект мог реагировать на различные события, его нужно поместить в Event Box self.event.set_tooltip_text('Баланс') self.event.connect('button-press-event', self.callback_button) self.__init_popupmenu() self.applet.connect('destroy', self.callback_destroy) self.applet.connect('change-background', self.change_background) self.applet.show_all() # Показываем все это на панели self.info.set_text(self.get_info()) self.timeout = 3600 #Время обновления значений в секундах (по умолчанию каждый час) self.timeout_count = 1 # Callbacks for timeout and change_background and orientation self.timeout_source = gobject.timeout_add (1000, self.update_main) gobject.type_register(MyApplet) # when the theme background changes def change_background(self, applet, type, color, pixmap): applet.set_style(None) applet.modify_style(gtk.RcStyle()) if type == gnomeapplet.COLOR_BACKGROUND: applet.modify_bg(gtk.STATE_NORMAL, color) elif type == gnomeapplet.PIXMAP_BACKGROUND: applet.get_style().bg_pixmap[gtk.STATE_NORMAL] = pixmap def __init_popupmenu (self): self.applet.setup_menu(''' <popup name='button3'> <menuitem name='Open Item' verb='Open' stockid='gtk-open'/> <menuitem name='About Item' verb='About' stockid='gtk-about'/> </popup>''', [ ('Open', self.callback_open), ('About', self.callback_about) ], None) # Update text def update_text(self): self.info.show() self.info.set_text(self.get_info()) def update_temp(self): self.get_info() self.update_text() def update_main(self): # Update temperatures (icon, text and tooltips) if necessary if self.timeout_count % (self.timeout) == 0: self.timeout_count = 0 self.update_temp() self.timeout_count += 1 return True def get_info (self): '''Делаем запрос''' cash = (os.popen('~/exemple/balans').read()) cash2 = cash.replace('\n', '') return cash2 def callback_button (self, widget, event): self.callback_open(self) def callback_open (self, event, data=None): '''Обновляем по клику''' self.update_temp() def callback_about (self, event, data=None): '''Показываем стандартное окошко среды GNOME''' os.system('gnome-about') def callback_destroy (self, applet): '''Уничтожаем объект''' del self.applet def applet_factory (applet, iid): MyApplet(applet, iid) return True def main (args): if len(sys.argv) == 2 and sys.argv[1] == 'run-in-window': window = gtk.Window(gtk.WINDOW_TOPLEVEL) window.set_title('Balans') window.connect('destroy', gtk.main_quit) applet = gnomeapplet.Applet() applet_factory(applet, None) applet.reparent(window) window.show_all() gtk.main() sys.exit() elif len(sys.argv) == 2 and sys.argv[1] == 'help': '''Выводим хелп по параметрам''' print ''' --run-in-window - run applet independent of gnome-panel --help - show this message''' else: gnomeapplet.bonobo_factory('OAFIID:GNOME_MyApplet_Factory', MyApplet.__gtype__, 'My Applet', '1.0', applet_factory) if __name__ == '__main__': main(sys.argv)
<oaf_info> <oaf_server iid='OAFIID:GNOME_MyApplet_Factory' type='exe' location='~/exemple/BalansApplet.py'> <oaf_attribute name='repo_ids' type='stringv'> <item value='IDL:Bonobo/GenericFactory:1.0' /> <item value='IDL:Bonobo/Unknown:1.0' /> </oaf_attribute> <oaf_attribute name='name' type='string' value='My Applet' /> <oaf_attribute name='description' type='string' value='Show your karma and ratio' /> </oaf_server> <oaf_server iid='OAFIID:GNOME_MyApplet' type='factory' location='OAFIID:GNOME_MyApplet_Factory'> <oaf_attribute name='repo_ids' type='stringv'> <item value='IDL:GNOME/Vertigo/PanelAppletShell:1.0' /> <item value='IDL:Bonobo/Control:1.0' /> <item value='IDL:Bonobo/Unknown:1.0' /> </oaf_attribute> <oaf_attribute name='name' type='string' value='My First Applet' /> <oaf_attribute name='name-ru' type='string' value='Balans Applet' /> <oaf_attribute name='description' type='string' value='Show your balans Setlinks, Sape, Linkfeed' /> <oaf_attribute name='description-ru' type='string' value='Отображает ваш баланс на Setlinks, Sape, Linkfeed' /> <oaf_attribute name='panel:category' type='string' value='Utility' /> <oaf_attribute name='panel:icon' type='string' value='computer.png' /> </oaf_server> </oaf_info>