Hlavní navigace

Hrátky z řádky: KDialog a Zenity

Adam Štrauch

Skriptujeme-li v bashi nebo podobném jazyce, brzo zjistíme, že nemáme moc možností jak pracovat s okny a jejich obsahem. Někdy se hodí udělat malý dialog, kde si může uživatel vybrat třeba možnosti instalace a nebo jen chceme jednoduše vybrat nějakou volbu. Pro tyto případy tu máme řadu nástrojů, z nichž Zenity a KDialog jsou nejznámější.

Co to je

KDialog a Zenity jsou programy, které na základě předaných parametrů zobrazí určitý výstup Qt, resp. v GTK okně. Jediné dva rozdíly mezi Zenity a KDialog je jejich syntaxe a knihovny, na kterých jsou založené. Uživatelé Gnome se budou pravděpodobně naklánět ke Zenity a uživatelé KDE ke KDialogu.

Výstup obou programů jsou dialogy, které známe i z jiných aplikací. Žádné složitější dialogy nebo naše vlastní vytvářet nejdou. Vždy jsme limitovaní na použití těch připravených.

Jak se to používá

Prakticky oba programy se používají stejným způsobem. Při spouštění zadáváme parametry jednomu z programů. Pak ho spustíme a on nám naservíruje požadovaný dialog případně s vyplněnými hodnotami. Po potvrzení hodnot program vytiskne na standardní výstup hodnoty, které jsme zadali.

Zenity

V případě Zenity máme k dispozici následující možnosti:

--calendar          Dialog kalendáře
--entry             Dialog vstupu textu
--error             Dialog chyby
--info              Dialog informací
--file-selection    Dialog výběru souborů
--list              Dialog seznamu
--notification      Dialog s upozorněním (jako tray ikonka)
--progress          Dialog indikace průběhu
--question          Dialog otázky
--warning           Dialog varování
--scale             Dialog měřítka
--text-info         Dialog textových informací 

Každý z těchto dialogů má parametry, které v případě například kalendáře zjistíme pomocí:

cx@godie ~ $ zenity --help-calendar
Použití:
zenity [PŘEPÍNAČ...]

Přepínače kalendáře
    --calendar                    Zobrazit dialog kalendáře
    --text=TEXT                   Nastavit text dialogu
    --day=DEN                     Nastavit den kalendáře
    --month=MĚSÍC                 Nastavit měsíc kalendáře
    --year=ROK                    Nastavit rok kalendáře
    --date-format=VZOREK          Nastavit formát vráceného data 

Zenity je plně lokalizované do češtiny, takže by použití nemělo dělat problémy ani uživatelům méně zdatným v angličtině.

Když už jsme nakousli kalendář, tak si ho také vytvoříme s použitím většiny parametrů.

zenity --calendar \
    --text="Ahoj světe" \
    --day=30 --month=10 \
    --year=2008 \
    --date-format="%d.%m.%Y" 
Zenity-cal

Dalším příkladem bude získání nějaké informace od uživatele. To se dělá přes dialog entry. Nápověda získaná s parametrem vypadá takto:

cx@godie ~ $ zenity --help-entry
Použití:
zenity [PŘEPÍNAČ...]

Přepínače vstupu textu
    --entry                       Zobrazit dialog vstupu textu
    --text=TEXT                   Nastavit text dialogu
    --entry-text=TEXT             Nastavit text vstupu
    --hide-text=TEXT              Skrýt text vstupu 

V tomto příkladě si ukážeme i další parametry, které se dají získat z manuálových stránek. Jedná se o obecné parametry a v nápovědě k dialogům je nenajdeme. Tyto parametry jsou 4:

--title=HODNOTA            Titulek okna
--window-icon=HODNOTA      Ikonka okna
--width=HODNOTA            Šířka
--height=HODNOTA           Výška 

A teď přejdeme ke zmiňovanému příkladu.

zenity --entry \
    --text="Zenity?" \
    --entry-text="Sem něco napíšeme" \
    --title="Otázkový dialog" \
    --width=300 \
    --height=100 
Zen-entry

Další informace o Zenity jsou dostupné v manuálových stránkách. Ty už bohužel nejsou lokalizované.

KDialog

Jak jsem již psal, KDialog je součástí balíku KDE a ve své funkci je Zenity velmi podobný. Obsahuje ale mnohem více připravených dialogů. V mém Gentoo není lokalizovaný do češtiny. V jiných distribucích tomu může být jinak. Jeho používání je malinko méně pohodlné, protože si musíme pamatovat pořadí jednotlivých parametrů.

Přeložená nápověda s většinou možností vypadá takto:

--yesno <text>                                     Ano/ne dialog
--yesnocancel <text>                               Ano/ne/storno dialog
--warningyesno <text>                              Ano/ne dialog s varováním
--warningcontinuecancel <text>                     Pokračovat/storno dialog s varováním
--warningyesnocancel <text>                        Ano/ne/storno dialog s varováním
--sorry <text>                                     Dialog s omluvou
--error <text>                                     Dialog s chybou
--msgbox <text>                                    Dialog se zprávou
--inputbox <text> <init>                           Dialog s jednořádkovým polem pro vstup od uživatele
--password <text>                                  Dialog s heslem
--textbox <file> [width] [height]                  Dialog, který načítá obsah ze souboru
--textinputbox <text> <init> [width] [height]      Dialog pro získání informací od uživatele
--combobox <text> [tag item] [tag item] ...        Dialog s comboboxem
--menu <text> [tag item] [tag item] ...            Dialog s menu
--checklist <text> [tag item status] ...           Dialog s výběrem možností z nichž vybrat můžeme všechny
--radiolist <text> [tag item status] ...           Dialog s výběrem možností z nichž vybrat můžeme jen jednu
--passivepopup <text> <timeout>                    Dialog s textem, který po uplynutí timeoutu zmizí
--getopenfilename [startDir] [filter]              Dialog pro otevření souboru
--getsavefilename [startDir] [filter]              Dialog pro uložení souboru
--getexistingdirectory [startDir]                  Dialog pro výběr adresáře
--getopenurl [startDir] [filter]                   Dialog pro otevření URL
--getsaveurl [startDir] [filter]                   Dialog pro uložení URL
--geticon [group] [context]                        Dialog pro výběr ikony
--progressbar <text> [totalsteps]            Progressbar dialog
--title <text>                               Titulek okna
--default <text>                             Výchozí hodnota 

Vidíme, že možnosti KDialogu jsou opravdu větší než u Zenity. KDialogu na rozdíl od Zenity chybí také dialog s kalendářem.

Jako příklad si vyzkoušíme –checklist. Ten zobrazí seznam položek a vybrané vrátí na standardní výstup.

kdialog --title "Zkouška checklistu" \
    --checklist "Text checklistu" \
    1 "Položka 1" \
    off 2 "Položka 2" \
    off 3 "Položka 3" \
    off 
KDialog-checklist

Jednotlivé položky se číslují a jako oddělovač se používá klíčové slovo „off“, které také musí být uvedeno na konci.

Závěr

Zarytým uživatelům příkazové řádky toto řešení vyhovovat nebude, ale jistě si najde své příznivce například u různých instalačních skriptů. Také skripty na nastavování sítě například na notebooku mohou ožít s použitím Zenity nebo KDialogu.

Našli jste v článku chybu?

31. 10. 2008 12:43

uživatel si přál zůstat v anonymitě
Zenity je fajn vec, uz sa mi par krat hodil. Nechcem rypat, ale nepoznate nieco podobne aj do windows? Vyrobit jednoduchu graficku nadstavu nad dos program bez programovania, len skriptovanim. diky.

30. 10. 2008 10:16

uživatel si přál zůstat v anonymitě
Kedze prikazovy riadok je skor zalezitostou textovej konzole tak by mi v tejto casti skor pasoval Dialog ako tieto zalezitosti grafickeho prostredia. Bude popis Dialogu v ramci tohto serialu?
Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

DigiZone.cz: Velká cena v Abú Dhabí: 131 ti­síc diváků

Velká cena v Abú Dhabí: 131 ti­síc diváků

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Měšec.cz: Stavební spoření: alternativa i pro seniory

Stavební spoření: alternativa i pro seniory

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka