Vytváříme nastavení pro Screenlet

Michal Hořejšek 20. 10. 2009

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.

widgety

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š.

Našli jste v článku chybu?
Lupa.cz: Jak důležitá je u firemních počítačů spotřeba?

Jak důležitá je u firemních počítačů spotřeba?

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

Podnikatel.cz: Vánoce v září? Kaufland si legraci nedělá

Vánoce v září? Kaufland si legraci nedělá

DigiZone.cz: Numan Two: rozhlasový přijímač s CD

Numan Two: rozhlasový přijímač s CD

Root.cz: Hořící telefon Samsung Note 7 zapálil auto

Hořící telefon Samsung Note 7 zapálil auto

Podnikatel.cz: Byla finanční manažerka, teď cvičí jógu

Byla finanční manažerka, teď cvičí jógu

Vitalia.cz: Fyzioterapeutka: Chůze naboso? Rozhodně ano!

Fyzioterapeutka: Chůze naboso? Rozhodně ano!

Vitalia.cz: 5 chyb, které děláme při skladování potravin

5 chyb, které děláme při skladování potravin

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

DigiZone.cz: Funbox 4K v DVB-T2 má ostrý provoz

Funbox 4K v DVB-T2 má ostrý provoz

120na80.cz: Zázrak ze smetiště: co léčí lopuch?

Zázrak ze smetiště: co léčí lopuch?

Vitalia.cz: dTest odhalil ten nejlepší kečup

dTest odhalil ten nejlepší kečup

DigiZone.cz: Digi Slovakia zařazuje stanice SPI

Digi Slovakia zařazuje stanice SPI

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků

Podnikatel.cz: Poslanci chtějí sebrat majetek Bakalovi

Poslanci chtějí sebrat majetek Bakalovi

Podnikatel.cz: Instalatér, malíř a elektrikář. "Vymřou"?

Instalatér, malíř a elektrikář. "Vymřou"?

Vitalia.cz: Tesco nabízí desítky tun jídla zdarma

Tesco nabízí desítky tun jídla zdarma