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

> Perl (97) - Curses - tvorba textových uživatelských rozhraní

Perl Dnes se budeme zabývat tvorbou uživatelského rozhraní pomocí knihovny Curses.

18.1.2010 00:00 | Jiří Václavík | Články autora | přečteno 10024×

Curses je knihovna pro správu a řízení textového výstupu. Obvykle můžeme na výstup v terminálu pouze přidávat řádky a případně editovat poslední. Curses toto omezení odstraňuje a umožňuje nám libovolně měnit obsah po celé ploše terminálu.

Mezi základní vlastnosti knihovny Curses patří vytváření oken, používání různých stylů písma nebo práce s myší. Lze tedy vytvářet použitelná uživatelská rozhraní v textovém režimu.

Curses se asi nejčastěji používá v kombinaci s jazykem C. Nicméně díky modulu Curses, který je třeba získat z CPAN, lze tuto knihovnu používat i v kombinaci s Perlem.

V několika následujících dílech si tedy základy práce s Curses představíme. Nejprve budeme pracovat pouze s čistým Curses a v další části se soustředíme na knihovny Curses::UI, které obsahují několik již vytvořených widgetů, s kterými lze pracovat daleko rychleji.

Úvod do syntaxe

Na úvod si řekneme o několika nezbytných funkcích, jež modul Curses poskytuje. Ještě předtím upozorněme, že jména funkcí používaných v Perlu se občas liší od názvů funkcí v Curses pro C. Velmi často je například v názvy funkce vynechané podtržítko.

Funkce initscr inicializuje Curses režim. Tuto funkci budeme psát na začátek všech Curses programů. Obvykle má za následek vyprázdnění obrazovky.

Naopak poslední funkcí, kterou budeme v rámci Curses volat je endwin, která ukončuje Curses mód - dochází k takovým činnostem jako uvolnění paměti a návratu na původní obrazovku apod.

Pokud funkci endwin na konci programu neuvedeme, z terminálu se stane rozsypaný čaj. Proto se doporučuje uzavřít endwin do bloku END, čímž získáme jistotu, že bude proveden i v případě selhání programu.

END {
    endwin;
}

Dále zde je funkce printw, která tiskne předaný řetězec na výstup. Funkcí na tisk textu existuje více, patří mezi ně také addstr.

Na základě těchto informací napíšeme program, který pouze vytiskne text na výstup.

use Curses;

initscr;
END{endwin;}
printw("***Hello World***");

Po spuštění se zdá, jako by se nic nestalo. Je to tak proto, že program začal, nato vytiskl text a okamžitě se ukončil. Musíme ho proto něčím zdržet. Nejlepším řešením bude použití funkce getch, která čte klávesu ze vstupu. Přepišme tedy náš program tak, aby s ukončením počkal na stisk klávesy.

use Curses;

initscr;
END{endwin;}
printw("***Hello World***");
getch;

Základní vstup a výstup

Jak již bylo uvedeno výše, funkce getch vrací klávesu, která byla stisknuta.

initscr;
END{endwin;}

printw("Stiskni nějakou klávesu: ");
my $key = getch;
printw("\nStiskl jsi tuto klávesu: <$key>");

getch;

Dále zde máme funkcí getstr pro čtení celých řádků. Jejím parametrem je proměnná, kam se má řetězec uložit.

initscr;
END{endwin;}

addstr("Zadej řádek: ");
getstr($text);
printw("Napsal jsi: <$text>");

getch;

Funkce echo resp. noecho povolují resp. zakazují zobrazování vstupních kláves. Implicitně je nastaveno echo. noecho usnadňuje kontrolu nad výstupem a je dobré ho používat zejména u čtení funkčních kláves.

Detekce kláves

Funkce keypad(okno, true/false) umožňuje číst funkční klávesy, kurzorové klávesy apod.

Poslední zmiňované funkce si můžeme předvést na programu, který načítá a vypisuje znak tak dlouho, dokud není stisknuta klávesa F3, která má kód 267. Když neznáme kód, stačí si ho nechat vypsat v následujícím programu.

initscr;
END{endwin;}

noecho;
keypad(stdscr, 1);

while(($k = getch) != 267){
    printw("$k\n");
}

Abychom si nemuseli dohledávat kódy, lze použít v našem případě funkci KEY_F. KEY_F(3) vrátí hodnotu 267. Totéž jako předchozí lze tedy přepsat následovně.

initscr;
END{endwin;}

noecho;
keypad(stdscr, 1);

while(($k = getch) != KEY_F(3)){
    printw("$k\n");
}

Doba čekání na vstup

Upozorněme ještě na funkci timeout. Ta nastavuje, jak dlouho bude program čekat na vstup. Pokud nedojde k odeslání příslušných dat na vstup programu do určené doby (nastavené v milisekundách), už se žádný vstup vyžadovat nebude.

Například, chceme-li, aby uživatel zadal na vstup nějaký znak do 5 sekund, stačí před načtení vstupu uvést tento příkaz.

timeout(5000);

Pokud čas vyprší, do proměnné se uloží -1.

Styly písma

Písmu lze nastavit několik atributů. Funkce attron(ATRIBUT) zapíná určitou vlastnost a attroff(ATRIBUT) ji vypíná. Použijeme-li attrset (v dokumentaci má název attr_set), nastaví se uvedené vlastnosti oddělené bitovým NEBO (a ostatní vlastnosti se vypnou). V tabulce jsou uvedeny nejběžnější vlastnosti písma.

KonstantaVýznam
A_NORMALnastaví běžný text
A_STANDOUTnastavuje zvýraznění; na většině terminálů totožné s A_REVERSE
A_REVERSEprohodí barvu písma s pozadím
A_UNDERLINEpodtržené
A_BLINKblikání textu
A_BOLDbuď tučné písmo nebo zesvětlení
A_INVISneviditelné písmo
COLOR_PAIR(id)nastaví barevnou kombinaci číslo id; definicí barevných kombinací se budeme zabývat později

Předvedeme si názorně použití těchto tří funkcí a uvedených atributů. Spusťme následující program.

initscr;
END{endwin;}

printw("Normalni text\n");
attron(A_BOLD);
printw("Tucny text\n");
attron(A_UNDERLINE);
printw("Tucny a podtrzeny text\n");
attron(A_BLINK);
printw("Tucny, podtrzeny a blikajici text\n");
attron(A_STANDOUT);
printw("Jeste navic zvyrazneny text\n");
attroff(A_BLINK);
printw("Vypiname blikani\n");
attrset(A_BLINK | A_BOLD);
printw("Nyni je text pouze blikajici a tucny\n");

getch;

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ů

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

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ář

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

> Poslední diskuze

20.9.2018 10:04 / Jan Ober
Jaký kurz a software by jste doporučili pro začínajcího kodéra?

20.9.2018 10:00 / Jan Ober
Re: Gimp

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

Více ...

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