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 9688×

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ů

13.9.2017 8:00 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tentokrát netradičně v pondělí: 18. září od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

3.9.2017 20:45 /Redakce Linuxsoft.cz
PR: Dne 21. září 2017 proběhne v Praze konference "Mobilní řešení pro business". Hlavní tématy konference budou: nejnovější trendy v oblasti mobilních řešení pro firmy, efektivní využití mobilních zařízení, bezpečnostní rizika a řešení pro jejich omezení, správa mobilních zařízení ve firmách a další.
Přidat komentář

15.5.2017 23:50 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

15.4.2017 15:20 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě IoT a radiokomunikace? Přijď na sraz spolku OpenAlt, který se bude konat ve středu 19. dubna od 18:30 v Šenkovně (Sokolská 60, Praha 2).
Přidat komentář

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

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

> Poslední diskuze

18.9.2017 14:37 / Rojas
high security vault

15.9.2017 7:33 / Wilson
new zealand childcare jobs

31.8.2017 12:11 / Jaromir Obr
Re: ukůládání dat ze souboru

30.7.2017 11:12 / Jaromir Obr
Národní znaky

27.7.2017 12:24 / Jaromir Obr
Cteni/zapis

Více ...

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