Hlavní navigace

Vytváříme nastavení pro Screenlet

20. 10. 2009
Doba čtení: 3 minuty

Sdílet

Z minulých dílů našeho seriálu o Screenletech už umíme udělat vzhledově pěkný Screenlet, ale někdy je potřeba nechat některé volby na uživateli. Například změnu konkrétních barev a podobně, či mu dát například specifickou možnost vybrat, u jakého disku chce sledovat a zobrazovat jeho zaplnění.

Options

Kvůli těmto důvodům se dnes naučíme nastavení do našeho Screenletu vytvořit. Nastavení je poté u všech Screenletů dostupné pravým myšítkem pod položkou Properties...

Nastavení se vytváří v konstruktoru ( __init__) pomocí metod add_options_group a add_options, kde add_options_group přidává do nastavení novou záložku a add_options novou položku s určitým nastavením. Jakou přesně položku (číslo, text, pravdivostní hodnotu, ..) určují následující metody.

FileOption Podtřída pro nastavení typu string, která nastavuje název souboru.
ImageOption Podtřída pro nastavení typu string, která nastavuje název obrázku.
DirectoryOption Podtřída pro nastavení typu file, která nastavuje název adresáře.
BoolOption Nastavení pro datový typ boolean.
StringOption Nastavení pro datové typy string.
IntOption Nastavení pro datové typy int nebo float.
FloatOption Nastavení pro datové typy float.
FontOption Nastavení fontu – jednoduchý string.
ColorOption Nastavení barvy – list s čtyřmi položky.

Toto je jen poloviční výčet. Existují další nastavení, které můžete nalézt v dokumentaci. Například, pokud se Screenlet připojuje na nějaký účet (e-mail, facebook, ..), tak je nebezpečné nick a heslo uchovávat jako text, který si může v nastavení kdokoli přečíst – to řeší metoda AccountOption, která nabídne dva edity, z toho jeden pro heslo, které se maskuje klasicky pod „puntíky“.

Nastavení budeme vytvářet v konstruktoru a zde je ukázka:

from screenlets.options import BoolOption, FontOption, ColorOption

def __init__( self, **keyword_args ):
  ...
  self.add_options_group( 'Appearance', 'Just appearance' )
  self.add_option( BoolOption( 'Appearance', 'showIcon', self.showIcon, 'Show icon', '' ) )
  self.add_option( FontOption( 'Appearance','font', self.font, 'Font', '' ) )
  self.add_option( ColorOption( 'Appearance','colorText', self.colorText, 'Text color', '' ) )
  self.add_option( ColorOption( 'Appearance','colorBackground', self.colorBackground, 'Background color', '' ) )
  ... 

Nejprve si na 5. řádku nadefinujeme novou záložku pomocí metody add_option_group, která se v Properties objeví pod položkou Options. První záložka Screenlet tam bude vždy, další si už vytváříme sami dle potřeby. Naší nové záložce nastavíme titulek „Appearance“ a jako popisek „Just appearance“. Popisek se poté objeví hned pod záložkou – můžete se podívat na záložku Screenlet, která má popisek „The basic settings for this Screenlet-instance.“.

Na dalších řádcích (6.-9.) nastavujeme do naší záložky různé nastavení pomocí metody  add_option.

Na 6. řádku přidáváme booleanskou hodnotu pomocí metody BoolOption, kde první atribut nastavuje, do jaké záložky tuto položku přidat. Druhý atribut je název proměnné, do které poté hodnotu ukládáme. Třetí atribut nastavuje defaultní hodnotu. Čtvrtý je titulek a pátý je popis, který se zobrazí po najetí myši. Tyto atributy jsou u všech nastavení stejné, jen některé mají něco navíc. Například metoda IntOption disponuje ještě atributy min a max, které určuj rozmezí čísla. Opět se podívejte do dokumentace.

V nastavení se položky řadí podle toho, jak je za sebou přidáme.

Screenlet nastavení 2

MenuItem

Nastavení už zvládneme udělat, ale je ještě jedna věc, která se může hodit. A ta věc je přidání vlastních položek do menu po stisknutí pravého myšítka.

Proč by se nám mělo něco takového hodit? Například máme Screenlet, který zobrazuje číslo, kolik máme nepřečtených e-mailů nebo zobrazuje začátky z posledních pár e-mailů. V takovémto Screenletu určitě nebudeme stahovat data z e-mailové schránky každou sekundu, nýbrž třeba každých 5–10 minut. Uživatel by mohl chtít však provést refresh teď hned. I takovému uživateli můžeme vyhovět, a já vám prozradím jak.

Stačí do metody on_init přidat metodou add_menuitem novou položku a v metodě on_menuitem_select odchytit signál a provést potřebnou akci. Ukážeme si to na příkladu.

def on_init( self ):
  self.add_menuitem( "refresh", "Refresh" )
  self.add_default_menuitems()

def on_menuitem_select( self, id ):
  if id == "refresh":
    self.getData()
    self.redraw_canvas() 

Na druhém řádku si přidáme naší novou položku s ID „refresh“ a titulkem „Refresh“. ID budeme používat pro odchycení signálu a titulek je zobrazen uživateli. Hned poté ještě přidáme defaultní položky Screenletu – to je ten výběr Size, Theme, Window, Properties, atp.

root_podpora

Metoda on_menuitem_select se zavolá po výběru položky v menu a pošle nám ID položky, která byla stisknuta. Podle ID provedeme na 6. řádku test a provedeme určitou akci. V našem případě, pokud se jedná o položku refresh, zavoláme funkci getData, kde si naprogramujeme stažení aktuálních dat z internetu a poté na řádku 8 Screenlet překreslíme.

Screenlet nastavení 1

Příště

To je pro dnešek vše a příště se podíváme na to, jak využít u Screenletu myš.

Byl pro vás článek přínosný?