LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Perl (100) - Curses - použití hotových widgetů

Perl Modul Curses::UI je objektově-orientovanou nadstavbou pro Curses a umí vytvářet textová uživatelská rozhraní rychleji a lépe, než jsme toho byli schopni dosud.

4.2.2010 18:00 | Jiří Václavík | Články autora | přečteno 10254×

Curses::UI je objektově orientovaný modul, který poskytuje rozhraní pro práci s Curses. Psaní aplikací pomocí Curses::UI je daleko rychlejší. To především díky tomu, že zde již máme předprogramované komponenty (widgety), ze kterých se programy skládají.

Modul je třeba nainstalovat obvyklým způsobem.

$ cpan Curses::UI

Vytvoření objektu

Pro inicializaci Curses::UI módu je třeba začít těmito dvěma řádky. Vytvoříme objekt typu Curses::UI.

use Curses::UI;
$cui = new Curses::UI;

Odteď již můžeme používat nadefinované widgety. Ještě předtím si ale zmiňme alespoň dva parametry konstruktoru. Prvním je -color_support => 1, který zapíná podporu barev. Pak je zde parametr -language (hodnota pro češtinu je czech - to znamená, že se použije překlad v modulu Curses::UI::Language::czech), avšak ten není zmíněn v dokumentaci.

my $cui = new Curses::UI(-color_support => 1);

Abychom předali řízení programu objektu, zavoláme na konci metodu mainloop.

$cui->mainloop;

Dnes si představíme několik widgetů z Curses::UI a příště je použijeme k napsání textového editoru.

Dialogy

Začněme zobrazováním dialogových oken. Díky metodě dialog je zobrazování velmi jednoduché a rychlé - stejně tak jako u všech dalších widgetů, které budou následovat. Existuje několik druhů dialogových oken.

Nejjednodušším použitím je informativní dialog, kterému předáme pouze řetězec.

Chceme-li dialog s otázkou, je třeba definovat několik parametrů. Předně to je -message, což je samotná otázka. Dále jsou to tlačítka a jejich hodnoty. Jako tlačítka lze použít hodnoty yes, no a cancel. Texty tlačítek ale nakonec budou zobrazeny ve vybraném jazyce. Návratovou hodnotou metody dialog je jedna z hodnot parametru -values podle toho, které tlačítko bylo stisknuto.

Tento příklad ilustruje práci s dialogy.

use Curses::UI;
$cui = new Curses::UI;

$souhlas = $cui->dialog(
    -title   => "dialog",
    -message => "Souhlasite?",
    -buttons => ["yes", "no"],
    -values  => [1, 0],
);

$cui->dialog($souhlas ? "Souhlasite" : "Nesouhlasite");

Vytvořili jsme dva dialogy. Na obrázku můžeme vidět, jak bude v takovém případě vypadat program.

Otázka *** Po záporné odpovědi

Existuje ještě další typ dialogu, který se používá u hlášek pro varování o chybách. Zde ovšem už používáme metodu error.

$cui->error("Neco je spatne");

Menu

Nezbytnou součástí většiny složitějších aplikací je menu. Pro něj zde máme definován widget Curses::UI::Menubar. Umí všechny základní vlastnosti menu včetně vytváření submenu.

Pro přidání widgetu se se používá metoda add, která má řadu parametrů. Prvními dvěmi hodnotami jsou ID a jméno widgetu - tedy v případě menu je to Menubar.

Dále můžeme přidat parametry -fg a -bg pro barvu textu a pozadí.

Nejdůležitějším parametrem však je -menu, kterému předáváme složitou datovou strukturu. Nebudeme si ji blíže rozebírat, protože by to mělo být zřejmé z následujícího příkladu.

my @menu = (
    {
         -label => "Menu1", -submenu => [
                {-label => "Polozka", -value => "1"},
                {-label => "Submenu", -submenu =>
                    [
                        {-label => "Polozka", -value => "2"},
                        {-label => "Polozka", -value => "3"},
                    ]
                },
                {-label => "Konec", -value => \&exit_dialog},
         ]
    },
    {
         -label => "Menu2", -submenu =>[
                {-label => "Polozka", -value => "4"},
                {-label => "Polozka", -value => "5"},
         ]
    },
);

Nyní přidáme menu widget do aplikace

use Curses::UI;
my $cui = new Curses::UI(-color_support => 1, -language => "czech");
my $menu = $cui->add(
    "menu",
    "Menubar",
    -menu =>\@menu,
    -fg => "white",
    -bg => "blue"
);
$cui->mainloop;

Jedna z položek vykonává po vybrání podprogram exit_dialog, který musíme dopsat.

sub exit_dialog {
    exit if $cui->dialog(
        -message   => "Konec?",
        -title     => "konec",
        -buttons   => ["yes", "no"],
    );
}

Po stisku této položky a potvrzení se program ukončí.

Menu

Vazby a klávesové zkratky

Funkcí set_binding můžeme navázat k podprogramům klávesové zkratky. set_binding má tento tvar volání.

$cui->set_binding(\&podprogram, klávesová_zkratka);

Konkrétní příkaz pro svázání zkratky Ctrl-o s voláním podprogramu open_file může vypadat třeba takto.

$cui->set_binding(\&open_file, "\\cO");

Velice často se jako úvodní parametr používají anonymní podprogramy. Následující příkaz sváže stisk tabulátoru s přesunem kurzoru na menu.

$cui->set_binding(sub {$menu->focus();}, "\t");

Metodu focus, která přesune kurzor do příslušného widgetu, lze díky dědičnosti volat i nad většinou ostatních widgetů, které si dnes budeme představovat nebo které naleznete v dokumentaci k Curses::UI.

Okna

Mimo menu musí být všechny labely v okně. Pro vytváření dalších widgetů je tedy třeba nejprve vytvořit jim okno.

my $okno = $cui->add("okno1", "Window");

A poté tomuto oknu přiřadíme widget.

my $widget = $okno->add(...);

Label

Pro nápis kamkoliv na obrazovku slouží widget Label, kterému stačí předat text a souřadnice v aktuálním okně.

my $label = $okno->add(
    "label", "Label",
    -text  => "LABEL",
    -x     => 10,
    -y     => 5,
    -bold  => 1,
);
$label->draw;

Texteditor

Dalším widgetem, se kterým se seznámíme, a který budeme ještě potřebovat, je Texteditor, v němž může uživatel editovat text.

my $texteditor = $dalsi_okno->add(
    "text", "TextEditor",
    -border => 1
);

Prohlížeč adresářové struktury

Aby mohl uživatel vybírat soubory z adresářové struktury, máme zde widget filebrowser. Ten ještě dále můžeme dělit na openfilebrowser a savefilebrowser. Parametrem widgetu filebrowser je cesta, ve které má výběr začínat.

my $file = $cui->filebrowser(
    -path => "/"
);

if(defined $file){
    $cui->dialog("Vybral jste soubor $file");
}else{
    $cui->error("Nevybral jste zadny soubor");
}

Výběr souborů *** Vybraný soubor

Kalendář

Pro zobrazení kalendáře zde je widget Calendar. Parametr -date specifikuje úvodní datum, na které má být kalendář nastaven.

my $kalendar = $okno->add(
    "mylabel", "Calendar",
    -date    => "2010-3-8"
);

Kalendář

Radiobuttony

Ještě uveďme použití widgetu Radiobuttonbox. Pomocí nich může uživatel vybírat jednu z definovaných voleb. K podobným účelům lze užít též Listbox.

my $radio = $okno->add(
    "radio", "Radiobuttonbox",
    -values    => [1, 2, 3],
    -labels    => {
        1 => "Volba 1",
        2 => "Volba 2",
        3 => "Volba 3"
    }
);

my $volba = $radio->get();

Radiobutton

Progressbar

Na závěr si uveďmě widget Progressbar. Ten obvykle uvádí, kolik procent něčeho je hotovo. Příklad progressbaru, který 20 sekund čeká, je zde.

$cui->progress(
    -max => 20,
    -message => "cekejte 20 sekund",
);

for (0..20) {
    $cui->setprogress($_);
    sleep 1;
}

Progressbar

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

16.7.2018 1:05 /František Kučera

Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.


Přidat komentář

18.6.2018 0:43 /František Kučera
Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.
Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

7.5.2018 16:20 /František Kučera
Na stránkách spolku OpenAlt vyšla fotoreportáž Pražské srazy 2017 dokumentující srazy za uplynulý rok. Květnový pražský sraz na téma audio se bude konat 17. 5. 2018 (místo a čas ještě upřesníme).
Přidat komentář

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2018) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze