Kategória: Python

Zmenené: 20. august 2011

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.

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

  1. Nastavenie gtk.Window, rovnako ako pri bežnej PyGTK aplikácii.
  2. Pridanie ikony oznamovacej oblasti (SysTray),
  3. Skrytie hlavného gtk.Window predvolene je zobrazená iba ikona SysTray,
  4. Spustenie hlavnej slučky,
  5. Skrytie/zobrazenie hlavného gtk.Window a nastavenie príslušného nástrojového typu, podľa aktuálneho stavu aplikácie.