Kategória: Python

Zmenené: 20. august 2011

Ikona v Systray (1)

Vzorový kód, pôvodne napísaný pre PHP GTK2 (zverejnený v php-gtk2 Cookbook), ktorý som upravil tak, aby fungoval v Pythone. Príklad ukazuje ako spustiť jednoduchú aplikáciu v SysTray.

Cieľ

Pripraviť ikonu v SysTray, ktorá bude simulovať prehrávač hudby. Keď je aplikácia spustená, zobrazí v SysTray štandardnú ikonu zastavenia prehrávania (STOCK_MEDIA_STOP). Po kliknutí na ikonu sa ikona zmení na ikonu prehrávania (STOCK_MEDIA_PLAY).

Riešenie

Nastavenie ikony v oznamovacej oblasti (SysTray) možno jednoducho docieliť pomocou widgetu gtk.StatusIcon, ktorý je dostupný od gtk+2.10.

  • ikona je nastavená ako štandardná (stock) ikona pomocou StatusIcon.set_from_stock(). Zoznam štandardných ikon je dostupný v dokumentácii PyGTK;
  • ikone možno priradiť aj nástrojový tip, pomocou StatusIcon.set_tooltip();
  • signál activate umožňuje zachytiť kliknutie ľavým tlačidlom myši;
  • signál popup-menu umožňuje zachytiť kliknutie pravým tlačidlom myši.

Vzorový kód

import gtk

def on_activate(statusicon):
    global player_status
    if player_status:                                    # poznámka 6
        statusicon.set_from_stock(gtk.STOCK_MEDIA_STOP)
        statusicon.set_tooltip('Left click to PLAY')
        player_status = 0
    else:
        statusicon.set_from_stock(gtk.STOCK_MEDIA_PLAY)
        statusicon.set_tooltip('Left click to STOP')
        player_status = 1

def on_popup_menu(statusicon):
    print "on_popup_menu"

statusicon = gtk.StatusIcon()                            # poznámka 1
statusicon.set_from_stock(gtk.STOCK_MEDIA_STOP)          # poznámka 2
statusicon.set_tooltip('Left click to PLAY')             # poznámka 3

player_status = 0
statusicon.connect('activate', on_activate)              # poznámka 4
statusicon.connect('popup-menu', on_popup_menu)          # poznámka 5

gtk.main()

Vysvetlenie

  1. Vytvorenie novej stavovej ikony.
  2. Nastavenie ikony.
  3. Nastavenie nástrojového tipu.
  4. Zachytenie kliknutia ľavým tlačidlom.
  5. Zachytenie kliknutia pravým tlačidlom.
  6. Zmena ikony v závislosti od aktuálneho stavu aplikácie.