přejít na obsah přejít na navigaci

Linux E X P R E S, Zenity - vlídná tvář pro vaše skripty

Zenity - vlídná tvář pro vaše skripty

Nejen příkazovým řádkem živ je „člověk linuxový“, a proto máme k dispozici okenní manažery, desktopová prostředí a spoustu nástrojů, které umožňují komunikovat s uživatelem podstatně vlídnějším způsobem, než je šibalsky pomrkávající kurzor terminálu. Jedním z takových nástrojů i Zenity.


Právě jste dopsali svůj skvělý skript v BASHi. Všechno funguje, jak má, vychytali jste všechny mouchy, na které jste narazili, a s patřičně hrdým výrazem jej předvádíte budoucímu uživateli. A v tom okamžiku to přijde. Místo tisíců děkovných dopisů trapné ticho a pak dotaz, který byste nejraději neslyšeli: „Ono to nemá žádné okýnka s ovládáním?“. Zpropadení „klikoši“ s těmi jejich okýnky … taková neúcta ke kráse příkazového řádku. Co teď? Buď „klikoše“ ukamenujete palbou argumentů ve prospěch vašeho udělátoru bez GUI, nebo bez mrknutí oka pokýváte chápavě hlavou a rozšíříte skript o grafické rozhraní. Pokud patříte do druhé (chápající) skupiny programátorů a právě se rozhlížíte po nějakém grafickém rozhraní pro vaše skripty, pak by vám zcela jistě nemělo uniknout Zenity.

Pro rozsáhlejší aplikace s náročným ovládáním si pravděpodobně vyberete některý ze sofistikovanějších jazyků ve spojení s návrhářem GUI (Glade, QtDesigner apod.). Ovšem v případě, že vaše potřeby bohatě pokryje BASH, hodilo by se vám nějaké lehké funkční prostředí, které vám ono „klikací rozhraní“ zprostředkuje. Právě takovým dialogovým prostředím, založeným na rozhraní GTK+, je Zenity. V jeho portfoliu naleznete spoustu prvků, díky kterým své skripty učiníte uživatelsky přítulnější a přiblížíte je tak uživatelům zvyklým na grafické rozhraní. Co tedy Zenity nabízí? Stručně řečeno – dialogová okna.

Jedním z nejčastěji používaných dialogových oken jsou „informační okna“, popř. „chybová hlášení“, kterými se uživateli snažíme sdělit více či méně důležitou informaci. Pokud tedy chceme uživateli říci nějakou důležitou informaci, stačí použít následující kus kódu:

zenity --info --text "Čtěte pravidelně LinuxEXPRES!"

Obrázek:  1.png

Informace

Varovat uživatele lze velmi podobně pomocí parametru warning:

zenity --warning --text "Čtení dalšího textu pouze na vlastní zodpovědnost\!";

Obrázek:  2.png

Varování

Chybové hlášení pak opět vyvoláte téměř identicky (tentokrát s parametrem error):

zenity --error --text "Nečtete-li pravidelně LinuxEXPRES, \npřicházíte o zajímavé informace!"

Obrázek:  3.png

kritická chyba

Všimněte si, že v chybovém hlášení je použit znak pro přechod na nový řádek (\n), tudíž lze text v dialogovém okně částečně formátovat.

Informace předávané uživateli jsou jistě důležitou součástí přívětivého prostředí, nicméně čas od času potřebujeme od uživatele také nějaké údaje získat. Pro tuto činnost máme připraveno několik prostředků. Pokud si vystačíme s odpovědí typu „ANO/NE“ (Budiž/Zrušit), máme v Zenity k dispozici formulář s otázkou (question):

odpoved=$(zenity --question --text "Jsou pro vás tyto informace užitečné?";echo $?)

Obrázek:  4.png

Otázka ano-ne

Pokud bychom vstup od uživatele nechali ležet ladem, byl by nám asi houby platný. Proto kýženou hodnotu uložíme pro další zpracování do proměnné (ve výše uvedeném příkladu do proměnné odpoved). V případě, že potřebujeme od uživatele vyšší stupeň interakce a odpověď typu ANO/NE pro nás není dostačující, lze využít některou z dalších možností. Pravděpodobně nejtypičtějším představitelem této kategorie je klasický vstupní formulář (dialogové okno entry):

odpoved=$(zenity --entry --text "Jméno a příjmení: ")

Obrázek:  5.png

Vstupní řádek

Vstupní formulář nám umožňuje rovněž definovat výchozí hodnotu pomocí parametru entry-text, která se uživateli zobrazí ve vstupním poli formuláře:

odpoved=$(zenity --entry --text "Jméno a příjmení: " --entry-text "Franta Jahoda")

Obrázek:  6.png

Vstupní řádek a předvolený text

Dalším užitečným pomocníkem pro získání informací od uživatele je dialogové okno s kalendářem. Pomineme-li již několikrát zmíněnou přívětivost aplikace, má tento formulář přidanou hodnotu i v tom, že jím předané informace mají standardizovaný formát a nemusíme tudíž dumat nad tím, co nám uživatel v dobré víře zanechal za změť znaků. Kalendář opět vyvoláme velmi jednoduchým způsobem pomocí parametru calendar a jeho výstup přesměrujeme pro pozdější zpracování do proměnné.

Datum=$(zenity --calendar --text "Vyberte datum" --title "Datum: " --day  1 --month 5 --year 2008)

Obrázek:  7.png

Kalendář

Parametry tohoto formuláře jsou poměrně snadno pochopitelné, nicméně pro upřesnění:

  • title – titulek okna kalendáře
  • text – informační text v okně kalendáře
  • day, month, year – přednastavené hodnoty dne, měsíce a roku ve zobrazeném okně kalendáře

V případě, že od uživatele potřebujeme získat na vstupu číselný údaj z předem definovaného intervalu, může nám přijít vhod následující formulář ve formě jakéhosi tahového potenciometru či „šoupátka“ (scale):

odpoved=$(zenity --scale --text "Zadejte číslo od 1 do 10" --min-value=1 --max-value=10 --value=1 --step 1)

Obrázek:  8.png

Šoupátko

Opět pro upřesnění význam jednotlivých parametrů:

  • min-value – spodní hranice intervalu
  • max-value – horní hranice intervalu
  • value – výchozí hodnota
  • step – krok o který se změní hodnota při pohybu „šoupátkem“

Kromě výše uvedených možností jednoduchých vstupů má Zenity v portfoliu svých formulářů rovněž metody vstupu pomocí seznamů několika hodnot (list), ať již ve formě radio-list (kdy vyžadujeme od uživatele právě jednu z možných odpovědí) nebo checklist (kdy dáváme uživateli možnost výběru více variant zároveň).

V případě, že se rozhodneme pro variantu s rádiovými tlačítky, stačí použít následující strukturu:

odpoved=$(zenity  --list  --text "Jak často čtete LinuxEXPRES?" --radiolist  --column "Volba" --column "Odpověď" TRUE "Jednou za den"  FALSE "Jednou za týden" FALSE "Jednou za měsíc" FALSE "Nečtu LinuxEXPRES")

Obrázek:  9.png

Položky v seznamu

Seznam parametrů formuláře radiolist se skládá vždy z jednotlivých párů – logické a textové proměnné. V textových proměnných uvádíme varianty, ze kterých má uživatel vybírat („Jednou za den“, „Jednou za týden“) a logické proměnné určují výchozí stav radiového tlačítka u dané volby při zobrazení formuláře (TRUE – stisknuto, FALSE – uvolněno). Výsledkem formuláře radiolist je hodnota textové proměnné u stisknutého tlačítka (v případě, že je formulář uzavřen stisknutím tlačítka OK/Budiž), případně prázdný řetězec (v případě, že je formulář uzavřen uzavíracím křížkem, popř. stiskem tlačítka Cancel/Zrušit).

Vzhledem k charakteru formuláře radiolist je třeba dodržet pravidlo, že jen jedno tlačítko může být ve stavu „stisknuto“.

Pokud potřebujeme od uživatele získat více možných odpovědí zároveň, sáhneme po variantě checklist:

odpoved=$(zenity  --list  --text "Které rubriky vás nevíce zajímají?" --checklist  --column "Volba" --column "Rubrika" TRUE "Praxe"  FALSE "Jak na to" TRUE "Okénko do oken" FALSE "Hardware")

Obrázek:  10.png

Položky seznamu, některé vybrané

Seznam parametrů formuláře checklist je totožný s výše uvedenou variantou radiolist pouze s jednou malou odlišností vyplývající z charakteru těchto formulářů - vzhledem k tomu, že u formuláře typu checklist lze očekávat více možných odpovědí, je možné ve výchozím zobrazení rovněž nastavit více zaškrtávacích polí jako zvolených (parametr TRUE). Výsledkem je v případě formuláře checklist řetězec obsahující hodnoty textových proměnných u zatržených boxů oddělené znakem roury ( | ).

Jak jste měli možnost vidět, lze pomocí formulářů poskytovaných programem Zenity vaše skripty v BASHi podstatným způsobem přiblížit běžnému uživateli a zjednodušit mu práci s nimi. Vzhledem k tomu, že tento článek si klade za cíl pouze krátké seznámení s možnostmi programu Zenity, nepostihuje všechny možnosti, které má případný programátor k dispozici. Pokud vás Zenity zaujalo a patříte mezi zvídavé jedince, doporučuji vám prostudovat manuálové stránky programu, kde najdete kompletní popis všech poskytovaných možností.

Nahoru

Odkazy

Příspěvky

Zenity - vlídná tvář pro vaše skripty
Let_Me_Be 3. 03. 2008, 01:20:56
Odpovědět  Odkaz 
Njn, dalsi jednoucelova aplikace, ktera v konecnem dusledku vubec nic neresi. Diky bohu za Kommander a DCOP.
Michal Grňa Re:Zenity - vlídná tvář pro vaše skripty
Michal Grňa 3. 03. 2008, 08:08:48
Odpovědět  Odkaz 
Ano, Zenity je jednoúčelová aplikace pro vytváření dialogů. Její zaměření je tedy srovnatelné spíše s Kdialog než s Kommanderem (který zase pro potřeby jednoduchého rozhraní může vyvolávat dojem "kanónu na vrabce").
Miroslav Hrončok Zenity - vlídná tvář pro vaše skripty
churchyard 3. 03. 2008, 15:11:22
Odpovědět  Odkaz 
Velmi užitečná ukázka toho, jak jde o dobrou věc:

http://wiki.ubuntu.cz/Nautilus/skripty/Konvertování_audio_formátů

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz