Mag 06
Creare una Status Icon in Python
Una status icon è una piccola immagine visualizzata nell’area di notifica, detta anche “system tray”.
La “system tray” è normalmente usata per icone temporanee che indicano qualche stato speciale.
Per esempio, una system tray icon potrebbe essere usata per notificare la ricezione di una nuova e-mail o di un nuovo messaggio istantaneo da parte di qualche contatto.
Dalla versione 2.10, le gtk+ offrono il supporto per queste icone di stato grazie all’oggetto gtk.StatusIcon.
In questo articolo riporto il codice python per creare una StatusIcon che possa servire da base per altre applicazioni.
Con il click del tasto sinistro del mouse sull’icona si invoca un’azione di default “on_activate“, mentre con quello destro, invocando il metdo on_popup_menu, verrà mostrato un menù popup con le voci: Preferences, About, Exit.
Le librerie gtk (e i rispettivi bindings per python) mettono a disposizione un apposito widget (gtk.AboutDialog()) per creare i dialoghi di informazione. Questo permette di settare facilmente il nome dell’applicazione, la versione, gli autori, la licenza, i traduttori e altre cosette interessanti.
In questa StatusIcon, cliccando sulla sulla voce “About” nel menù popup dell’icona verrà visualizzato tale widget per visualizzare una finestra di dialogo informazione.
import gtk
class MyStatusIcon(gtk.StatusIcon):
def __init__(self):
gtk.StatusIcon.__init__(self)
menu = '''
<ui>
<menubar name="Menubar">
<menu action="Menu">
<menuitem action="Preferences"/>
<separator/>
<menuitem action="About"/>
<menuitem action="Exit"/>
</menu>
</menubar>
</ui>
'''
actions = [
('Menu', None, 'Menu'),
('Preferences', gtk.STOCK_PREFERENCES, '_Preferences...', None, 'tooltip preferences', self.on_preferences),
('About', gtk.STOCK_ABOUT, '_About', None, 'tooltip About', self.on_about),
('Exit', gtk.STOCK_QUIT, '_Exit', None, 'tooltip Exit', self.on_close)
]
actionGroup = gtk.ActionGroup(’Actions’)
actionGroup.add_actions(actions)
self.manager = gtk.UIManager()
self.manager.insert_action_group(actionGroup, 0)
self.manager.add_ui_from_string(menu)
self.menu = self.manager.get_widget(’/Menubar/Menu/About’).props.parent
self.set_from_file(”image.svg”)
self.set_tooltip(”tooltip message”)
self.connect(’activate’, self.on_activate)
self.connect(’popup-menu’, self.on_popup_menu)
def on_activate(self, data):
print “clicked”
def on_popup_menu(self, status, button, time):
self.menu.popup(None, None, None, button, time)
def on_close(self, data):
gtk.main_quit()
def on_preferences(self, data):
print “clicked on preferences”
# and this one to show the about box
def on_about(self, data):
about = gtk.AboutDialog()
about.set_name(”MyStatusIcon”)
about.set_version(”0.1″)
about.set_copyright(”Copyleft 2008 - fenix”)
about.set_license(”license”)
about.set_website(”http://www.portus.altervista.org”)
about.set_authors(["fenix <portusgraphics@gmail.com>"])
try:
about.set_logo(gtk.gdk.pixbuf_new_from_file(”image.svg”))
except:
pass
about.set_comments(”Commento”)
about.run()
about.destroy()
if __name__ == ‘__main__’:
myStatusIcon = MyStatusIcon()
gtk.main()
Per lanciare la status icon:
- copia il codice in un nuovo file con estenzione *.py (ad esempio
MyStatusIcon.py); - creare una immagine svg con il nome “
image.svg” e posizionarla nella stessa directory del file precedente; - aprire un terminale, posizionarsi nella directory dove avete salvato il file e lanciare l’applicazione; ad esempio, se avete salvato il file con il nome
MyStatusIcon.py, digitando:
python MyStatusIcon.py
