Дата: 2010-07-02 11:38:37
Комментариев: 0

В предыдущей статье мы сделали консольный вывод суммы балансов в Setlinks, Sape и Linkfeed, используем его для нашего апплета. В ранее созданной папке ~/exemple/ создадим файл BalansApplet.py:

$cat 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)

При необходимости измените путь до скрипта balans. Теперь создадим файл BalansApplet.server с мета-информацией для нашего апплета с таким содержимым:
$cat BalansApplet.server
<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>
 

Также при необходимости измените путь до нашего BalansApplet.py
Осталось Переместить файл BalansApplet.server в каталог /usr/lib/bonobo/servers/
$sudo mv ~/exemple/BalansApplet.server /usr/lib/bonobo/servers/

Теперь добавляем апплет на гномовскую панель стандартным методом.
Файлы:
applet.tar.gz
теги: applet, python

0 комментариев

Оставить комментарий: