Ikona v Systray (2)
Pokračovanie vzorového kódu, pôvodne napísaného pre PHP GTK2 (zverejnený v php-gtk2 Cookbook), ktorý som upravil tak, aby fungoval v Pythone. Príklad ukazuje ako zobraziť okno aplikácie po kliknutí na ikonu v SysTray.
Obsah článku
Cieľ
Ikona v SysTray vytvorená v prvej časti nie je užitočná, pretože nemá priradenú žiadnu aplikáciu. V tejto časti ukážem ako prepojiť ikonu s aplikáciou a zaistiť aby sa, po kliknutí ľavým tlačidlom na ikonu, zobrazilo hlavné okno aplikácie. Tento príklad, hoci veľmi jednoduchý, je dôležitý, pretože po jeho pochopení nebudete mať problém navrhnúť plnohodnotnú aplikáciu s ikonou v oznamovacej oblasti pomocou PyGTK.
Riešenie
Po pochopení tajomstiev, vypísaných nižšie, dokážete navrhnúť aplikáciu s ikonou v SysTray takto jednoducho:
- navrhnúť svoju aplikáciu ako normálne,
- po otestovaní svojej aplikácie pridať ikony do systémovej oblasti pomocou gtk.StatusIcon,
- skryť svoju hlavnú aplikáciu takže jediná viditeľná vec je ikona v SysTray,
- spustiť hlavnú slučku,
- zobraziť svoju hlavnú aplikáciu po kliknutí ľavým tlačidlom myši na ikonu v SysTray,
- obsluha kliknutia pravým tlačidlom bude v ďalšom článku (do vyskakovacieho menu, aktivovaného pravým tlačidlom myši, možno pridať niektoré najčastejšie používané funkcie).
Vzorový kód
import gtk, sys
def on_activate(statusicon):
global window, app_status
if app_status: # poznámka 5
statusicon.set_tooltip('Kliknite ľavým na zobrazenie okna GTK')
window.hide_all()
app_status = 0
else:
statusicon.set_tooltip('Kliknite pravým na skrytie okna GTK')
window.show_all()
app_status = 1
# nastavenie okna GTK
window = gtk.Window() # poznámka 1
window.set_title(sys.argv[0])
window.set_size_request(300, 140)
window.set_position(gtk.WIN_POS_CENTER_ALWAYS)
window.connect('destroy', gtk.main_quit)
vbox = gtk.VBox()
window.add(vbox)
vbox.pack_start(gtk.Label("Klikli ste ľavým tlačidlom\
na ikonu v SysTray!"))
vbox.pack_start(gtk.Label("Kliknite ešte raz a skryjete toto okno."))
# nastavenie ikony SysTray
statusicon = gtk.StatusIcon() # poznámka 2
statusicon.set_from_stock(gtk.STOCK_NETWORK)
statusicon.set_tooltip('Kliknite ľavým na zobrazenie okna GTK')
app_status = 0
statusicon.connect('activate', on_activate)
window.hide_all() # poznámka 3
gtk.main() # poznámka 4
Vysvetlenie
- Nastavenie gtk.Window, rovnako ako pri bežnej PyGTK aplikácii.
- Pridanie ikony oznamovacej oblasti (SysTray),
- Skrytie hlavného gtk.Window predvolene je zobrazená iba ikona SysTray,
- Spustenie hlavnej slučky,
- Skrytie/zobrazenie hlavného gtk.Window a nastavenie príslušného nástrojového typu, podľa aktuálneho stavu aplikácie.