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

> Perl (117) - Tk - některé pokročilejší widgety

Perl Navážeme na předchozí díl a podíváme se na pár dalších widgetů. Tentokrát půjde o widgety, které již mají složitější strukturu a větší množství vlastností.

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

Víceřádkové textové pole s posuvníkem

Víceřádkový vstup lze realizovat pomocí prvku Text. Umožňuje uživateli editovat více řádků textu.

Lze nastavit vlastnosti state (pro vypnutí nastavíme na disabled) a dále height, width. Podívejme se nyní na metody. V několika metodách využíváme parametru pozice, což bývá řetězec, jež může mít několik různých tvarů. Zde je několik intuitivních příkladů, jak lze specifikovat pozici.

  • číslo_řádku.číslo_sloupce
  • insert (aktuální pozice)
  • end (konec textu)
  • +počet lines, -počet lines, +počet chars, -počet chars (relativní určení pozice)
  • linestart, lineend, wordstart, wordend (opět relativní určení)
NázevVýznam
get(pozice1, pozice2)vrátí text, volitelně pouze na určeném rozsahu
insert(pozice, text)vloží text na zadanou pozici
see(pozice)přesune pohled na text tak, aby byla vidět daná pozice
search(vzor, pozice1, pozice2)vyhledá text
search(volby --, vzor, pozice1, pozice2)to samé, ale lze určit následující volby intuitivního významu: exact, backward, forward, regexp, nocase, count proměnná_kam_se_uloží_délka_nalezeného_řetězce
indexvrátí index tvaru číslo_řádku.číslo_sloupce
markSet, markUnsetzáložky na pozice

Ukažme si příkazy, které nejprve vytvoří textové okno a pak vloží na nějakou pozici zadaný text.

$pole = $m->Text(-width=>100, -height=>4)->pack();
$pole->insert("3.50", "toto se vlozi na zadanou pozici");
$pole->insert("end", "toto se vlozi na konec textu");

Prvek Text nabízí tzv. tagování, což je možnost nastavení stylu písma. Je možné si nadefinovat styl o nějakém názvu a pak ho používat.

$text->tagConfigure("styl", -foreground=>"green", -background=>"black");
$text->insert("1.1", "tento text je napsan stylem 'styl'.", "styl");
$text->tagAdd("styl", "2.2", "4.4");

Je-li pole moc malé, nemá pole implicitně oproti jiným knihovnám žádný posuvník. Ten je potřeba dopsat ručně. Nejprve tedy vytvoříme posuvník pomocí Scrollbar a poté ho přiřadíme textovému poli pomocí -xscrollcommand nebo -yscrollcommand a nakonfigurujeme, aby se posunoval současně s textem.

$posuvnik = $m->Scrollbar();
$text = $m->Text(-yscrollcommand => ["set", $posuvnik]);
$posuvnik->configure(-command => ["yview", $text]);

$posuvnik->pack(-side=>"right", -fill => "y");
$text->pack(-side => "left");

Více oken

Je-li potřeba více než-li jedno okno, použijeme prvek Toplevel. K novému oknu se můžeme chovat stejně jako k hlavnímu oknu. Zde jsou příkazy, které vytvoří druhé okno a nastaví mu titulek.

$okno2 = $m->Toplevel;
$okno2->title("Toto je druhe okno");

Druhé okno se otevře v okamžiku, kdy dojde k vykonání těchto příkazů. Může se tak stát hned po spuštění programu nebo až po nějaké uživatelem vyvolané akci.

Menu

Existuje více metod, jak vytvořit menu. Některé si tu v následujících odstavcích představíme.

Menu přes rámečky

Vytvoření menu se skládá z několika kroků.

Nejprve je potřeba vyhradit pro menu lištu, kam pak umístíme jednotlivé nabídky. Lištu vytvoříme pomocí prvku Frame (který lze též použít pro uspořádávání většího množství prvků na stránce pomocí seskupení). Obvykle se lišta umísťuje nahoru a proto metodě pack sdělíme, že právě tam chceme menu umístit. To uděláme předáním argumentu -side => "top".

Nabídky vytvoříme pomocí Menubutton. Do každé nabídky dále přidáme příslušné položky, k čemuž existuje metoda command.

$lista=$m->Frame()->pack(-side => "top");
$nabidka_soubor = $lista->Menubutton(-text => "Soubor", -borderwidth=>1,
  -relief=>"raised")->pack(-side=>"left", -padx=>1);
$nabidka_soubor->command(-label=>"Otevrit", -accelerator=>"Ctrl+O", -command=>\&otevrit);
$nabidka_soubor->command(-label=>"Ulozit", -accelerator=>"Ctrl+S", -command=>\&ulozit);
$nabidka_soubor->command(-label=>"Konec", -accelerator=>"Ctrl+Q", -command=>sub{exit});

$nabidka_oprogramu = $lista->Menubutton(-text => "O programu", -borderwidth=>1,
  -relief=>"raised")->pack(-side=>"left", -padx=>1);

Výsledkem bude následující menu.

Menu

V Tk má menu ještě několik dalších možností. Přímo do něj lze přidávat přepínací a zaškrtávací položky. Mezi naše nabídky Soubor a O programu vklíníme ještě jednu, kde si je vyzkoušíme.

Metoda radiobutton vytvoří přepínací položku. Funguje stejně jako prvek Radiobutton a tedy je třeba specifikovat parametr -variable, kterým svážeme tyto položky s nějakou proměnnou. Analogicky funguje metoda checkbutton. Také se může hodit metoda separator, která vloží do vybrané nabídky oddělovač. Zkusme přidat do našeho příkladu následující kód.

$nabidka_upravy = $lista->Menubutton(-text => "Upravy", -borderwidth=>1,
  -relief=>"raised")->pack(-side=>"left", -padx=>1);
$nabidka_upravy->radiobutton(-label=>"Zalamovat", -variable =>\$zalamovani);
$nabidka_upravy->radiobutton(-label=>"Nezalamovat", -variable =>\$zalamovani);
$nabidka_upravy->separator();
$nabidka_upravy->checkbutton(-label=>"Ukladat automaticky", -variable =>\$ukladat);

Získáme následující menu.

Složitější menu

Menu přes vlastnost hlavního okna

Nyní využijeme speciální vlastnosti hlavního okna prvku Menu. Nejprve tedy vytvoříme menu a poté pomocí configure nastavíme vlastnost -menu hlavního okna. Dále již můžeme vytvářet nabídky pomocí metody cascade a jednotlivé položky pomocí command.

$menu = $m->Menu();
$m->configure(-menu => $menu);

$nabidka_soubor = $menu->cascade(-label=>"Soubor");
$nabidka_soubor->command(-label=>"Konec", -command=>sub{exit});

$nabidka_oprogramu = $menu->cascade(-label=>"O programu");
$nabidka_oprogramu->command(-label=>"Info", -command=>sub{$m->messageBox(
  -message=>"Tento program vznikl v roce 2010 a jinak nic nedela", -type => "ok")});

Menu vytvořené tímto způsobem lze obarvovat. Metoda command má mimo jiné parametry -background a -activebackground (resp. -foreground a -activeforeground), které nastavují stálou barvu a barvu při přejetí myší. Zde je příklad takového barevného tlačítka.

$nabidka_soubor->command(
    -label => "Special",
    -activebackground => "green",
    -activeforeground => "orange",
    -background => "orange",
    -foreground => "green",
    -command => sub{$m->messageBox(-message => "Stiskl jsi barevne tlacitko!")}
);

Podívejme se na výsledek.

Barevné menu po rozbalení *** Barevné menu při přejetí položky myší

Grafická plocha

Prvek Canvas umožňuje vytvářet základní grafické objekty, to jest body, úsečky, kružnice, křivky, a podobně. Každý takovýto objekt je navíc skutečně objektem i z programátorského hlediska, a tak lze snadno konfigurovat jeho vlastnosti.

Obecně pro nakreslení nějakého objektu na grafickou plochu voláme metodu create. Tato metoda přijímá jako první argument typ objektu a ostatní argumenty již závisejí na něm. Jako typy lze volit arc, bitmap, image, line, polygon, oval, rectangle, text, window. Také lze volat přímo metody createLine, createOval apod.

Každý vytvořený objekt má nějaké vlastnosti. Zde je několik vlastností, které mají všechny nakreslené objekty.

VlastnostVýznam
-fillbarva vnitřku
-outlinebarva okraje
-widthtloušťka okraje
-stipple, -outlinestipplevykreslí objekt vzorem

Uveďme ještě vlastnosti specifické pro konkrétní objekty.

ObjektParametrVlastnostVýznam
Obloukarc-startpočáteční úhel
-extentrozpětí
-stylepieslice, chord nebo arc
Bitmapa resp. obrázekbitmap resp. picture-anchorstrany pro ukotvení
-bitmap resp. -imagesoubor
Úsečkaline-arrowzobrazení šipky; možné jsou hodnoty none, first, last, both
-arrowshapehodnotou je odkaz na pole o 3 prvcích, které specifikují rozměry šipky
Texttext-texttext, který se má zobrazit
-justifyzarovnání; možnosti jsou left, right, center
-anchorukotvení
Oknowindow-windowvloží jiný prvek do grafické plochy

Zde je ukázka umístění několika objektů do grafické plochy.

$p=$m->Canvas(-width=>500, -height=>200, -background => "green");
$p->create("line", 10, 50, 100, 150);
$p->createLine(10, 20, 100, 150, -width => 5, -fill => "yellow");
$p->createRectangle(100, 80, 400, 50, -fill => "blue");
$p->createOval(60, 100, 120, 200, -fill => "red");
$p->createText(300, 160, -text=>"toto je canvas", -fill=>"white",
  -font=>"-*-*-*-*-*--25-*-*-*-*-*-*");
$p->pack();

Po spuštění programu se zobrazí následující.

Grafická plocha

Podívejme se ještě na některé metody, které lze nad objektem Canvas volat.

MetodaVýznam
create("objekt", x, y, ...), create("objekt", x1, y1, x2, y2, ...)vytvoří objekt
coords(objekt, nová_pozice), move(objekt, nová_pozice)přesune objekt na souřadnice nová_pozice resp. na relativní pozici
raise, lowerposune objekt nahoru, dolů
scaleupraví rozměry objektu
deletesmaže objekt
itemconfigure(objekt, parametry)konfiguruje objekt
postscriptvygeneruje postscript soubor
find("příkaz")vyhledá seznam vyhovujících objektů; například "closest x y", "below $objekt" atd.
bindsvázání s událostí

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ů

23.4.2014 7:29 /MaReK Olšavský
Čínská firma Lemaker představila konkurenci Raspberry Pi, SBC Banana Pi s 2 jádrovými SoC Allwinner A20 (Cortex-A7) o frekvenci 1 GHz, a (konečně) jedním SATA konektorem. GPIO header by měl být kompatibilní s R-Pi i možnosti připojení jsou stejné.
Přidat komentář

23.4.2014 7:29 /MaReK Olšavský
Bezpečnostní chyba „Heartbleed“ v OpenSSL se dostala i do hlavních zpráv světových médií a pravděpodobnost objevení další je nenulová. Naprostá dominance (OpenSSL má téměř monopolní postavení) pak znamená ohrožení opravdu velkého počtu uživatelů. Stávající OpenSSL je vyvíjené dlouhou dobu a Theo de Raadt se rozhodl pro vytvoření forku LibreSSL, který přinese i značné vyčištění API.
Přidat komentář

22.4.2014 6:47 /MaReK Olšavský
Svobodný software a softwarově definované sítě/datacentra se doplňují. O možných změnách stávajících rolí v datacentrech, píše Dan Kusnetzky.
Přidat komentář

22.4.2014 6:47 /MaReK Olšavský
Zatím není úplně jasné, zda je reálné, aby Chromebooky pronikly do enterprise sféry, přestože se Google a Citrix snaží o zpřístupnění kritických aplikací z platformy Windows.
Přidat komentář

18.4.2014 7:51 /MaReK Olšavský
Práce je dokončena a vyšlo Ubuntu 14.04 „Trusty Tahr“, které je s prodlouženou podporou (LTS). Zároveň s originálním Ubuntu vyšly i oficiální forky. Neškodí si připomenout 10 kroků po instalaci.
Přidat komentář

18.4.2014 7:51 /MaReK Olšavský
Pátrání po troskách letu 370 trvá přes měsíc a vedle různých konspiračních teorií je i seriozní přístup k hledání, jehož se účastní i automatizovaná miniponorka Bluefin-21, jejíž systémy využívají GNU/Linux.
Přidat komentář

18.4.2014 7:51 /MaReK Olšavský
Uživatelé Wordpressu mají k dispozici novou verzi 3.9. Vývojáři zapracovali především na vestavěném editoru, jenž se podobá editoru známému uživatelům Google Docs.
Přidat komentář

17.4.2014 7:17 /MaReK Olšavský
Open source pro knihovny, to je Koha, která vznikla na Novém Zélandě a dnes patří mazi nejlepší software svého druhu. Historické okénko, na webu OpenSource.com, ukazuje jak kontext vzniku software, jež vznikl z potřeby efektivního a levného řešení.
Přidat komentář

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

> Poslední diskuze

7.4.2014 6:31 / MaReK Olšavský
Re: No, nevím

4.4.2014 10:22 / Petr Ježek
No, nevím

4.4.2014 10:18 / Petr Ježek
ATI

24.3.2014 13:54 / Michal Linha
Re: Delimiter

24.3.2014 13:46 / Michal Linha
Re: Delimiter

Více ...

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