Mag 06

Creare una Status Icon in Python

Tag: Codice, pythonfenix @ 22:27

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 <[email protected]>"])
		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:

  1. copia il codice in un nuovo file con estenzione *.py (ad esempio MyStatusIcon.py);
  2. creare una immagine svg con il nome “image.svg” e posizionarla nella stessa directory del file precedente;
  3. 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

One Response to “Creare una Status Icon in Python”

  1. louboutin replica says:

Leave a Reply



Hello !