Perl/Tk
Kompletní česká příručka ke grafickému toolkitu Tk v Perlu — perlovská obdoba pythonního Tkinteru. Widgety, správci rozmístění, události, dialogy a hotové příklady.
01Úvod & instalace
Tk je grafická knihovna Johna Ousterhouta, kterou pro Perl adaptoval Nick Ing‑Simmons. Do Perlu se používá přes modul Tk (často psáno Perl/Tk nebo pTk). Běží na Unixu, Linuxu i Windows.
Tk. Koncepty (widgety, pack/grid, volby s pomlčkou) jsou stejné, jen syntaxe je objektová a perlovská: $rodic->Widget(...).Instalace
| Systém | Příkaz |
|---|---|
| CPAN | cpan Tk nebo cpanm Tk |
| Debian / Ubuntu | sudo apt install perl-tk |
| Fedora | sudo dnf install perl-Tk |
| Windows | Strawberry Perl: cpan Tk (má kompilátor v sobě) |
Ověření, že modul funguje a jakou máš verzi:
Tk 804.x (postavená na Tcl/Tk 8.x, s podporou Unicode a Xft antialiasingu). Nezaměňuj s modulem Tkx, což je jiná, tenčí vazba přímo na Tcl/Tk s odlišným API.02První program
Každá aplikace má hlavní okno MainWindow, do něj vkládáš widgety a nakonec spustíš smyčku událostí MainLoop.
$rodic->TypWidgetu(volby)->spravce(volby). Metoda vytvoří widget, správce (pack/grid/place) ho umístí. Bez správce se widget nikdy nezobrazí.03Widget, volby a správci rozmístění
Tři pojmy, na kterých stojí celý Perl/Tk:
- Widget — grafický prvek (tlačítko, popisek, plátno…). Vzniká voláním metody rodiče, např.
$mw->Button(...). - Volby (options) — konfigurační dvojice s pomlčkou:
-text => "…",-command => sub {…},-bg => "white". Předávají se jako hash, pořadí nerozhoduje. - Správce rozmístění — určuje, kam se widget v rodiči umístí:
pack,gridneboplace.
pack a grid ve stejném rámci aplikaci zablokuje. Různé rámce ale mohou mít každý svého správce.Hierarchie oken: kořen je MainWindow, do něj vkládáš widgety a rámce, do rámců další widgety. Rodič se předává implicitně tím, že widget vytvoříš jeho metodou.
04Správce pack
Nejjednodušší správce. Přilepuje widgety k jedné straně kontejneru za druhým. Ideální pro řádky, sloupce a nástrojové lišty.
| Volba | Význam |
|---|---|
-side | 'top' (výchozí), 'bottom', 'left', 'right' |
-fill | roztažení: 'x', 'y', 'both', 'none' |
-expand | 1 = zabrat volné místo navíc |
-padx / -pady | vnější odsazení v pixelech |
-ipadx / -ipady | vnitřní odsazení |
-anchor | zarovnání: 'n' 's' 'e' 'w' 'center' … |
05Správce grid
Rozmisťuje widgety do mřížky řádků a sloupců. Nejvhodnější pro formuláře, kde chceš zarovnané popisky a pole.
| Volba | Význam |
|---|---|
-row / -column | pozice v mřížce (číslováno od 0) |
-rowspan / -columnspan | přes kolik řádků/sloupců se buňka roztáhne |
-sticky | přilepení ke stranám buňky: 'nsew', 'ew', 'w' … |
-padx / -pady | odsazení buňky |
06Správce place
Přesné umístění na absolutní nebo relativní souřadnice. Používej výjimečně — např. pro překryvy nebo vlastní layouty.
| Volba | Význam |
|---|---|
-x / -y | absolutní pozice v pixelech |
-relx / -rely | relativní pozice 0.0–1.0 vůči rodiči |
-relwidth / -relheight | relativní velikost 0.0–1.0 |
-anchor | ke kterému bodu se souřadnice vztahují |
07Label & Message
Label zobrazuje jednořádkový text nebo obrázek. Message je varianta pro delší text, který se sám zalamuje.
-textvariable => \$prom a měň proměnnou, nebo volej $label->configure(-text => "nový text").09Entry
Jednořádkové vstupní pole. Hodnotu čteš metodou get nebo přes navázanou proměnnou -textvariable.
| Metoda / volba | Význam |
|---|---|
$e->get | vrátí obsah pole |
$e->delete(0,'end') | vymaže obsah |
$e->insert('end',"txt") | vloží text na pozici |
-show | maskovací znak (heslo) |
-state | 'normal' 'disabled' 'readonly' |
-validate | režim validace vstupu |
10Text
Víceřádkový editor. Pozice se udávají jako 'řádek.sloupec', řádky se číslují od 1, sloupce od 0 — začátek je tedy '1.0', konec 'end'.
'1.0' = začátek, 'end' = konec, 'insert' = kurzor, '2.5' = 2. řádek, 6. znak. Metody: get, insert, delete, see, search, tagConfigure.11Checkbutton & Radiobutton
Checkbutton je nezávislý přepínač (zap/vyp). Radiobutton jsou skupina sdílející jednu proměnnou — vybrat lze jen jeden.
12Listbox
Seznam položek k výběru. Režim výběru řídí -selectmode: 'browse' (jedna), 'single', 'multiple', 'extended'.
curselection ve skalárním kontextu odkaz na pole. V seznamovém kontextu (jako výše) dostaneš normální pole indexů.13Scale & Scrollbar
Scale je posuvník pro výběr čísla z rozsahu. Scrollbar propojíš s widgetem přes jeho -yscrollcommand / -xscrollcommand.
Ruční propojení Scrollbaru
Většinou stačí obalit widget přes Scrolled('...'). Ruční způsob, když potřebuješ plnou kontrolu:
14Frame & LabFrame
Frame je neviditelný kontejner pro seskupení widgetů — základní nástroj pro strukturování rozvržení. LabFrame má navíc rámeček s popiskem.
17Canvas
Kreslicí plátno pro čáry, obdélníky, elipsy, text a obrázky. Každý objekt má číselné ID, kterým ho dál ovládáš (přesun, změna, smazání).
| Metoda | Vytvoří / udělá |
|---|---|
createLine | čáru (i lomenou), volby -arrow -width -fill |
createRectangle | obdélník |
createOval | elipsu / kruh |
createPolygon | mnohoúhelník |
createText | text |
createImage | obrázek (Photo) |
move($id,dx,dy) | posune objekt |
coords($id,…) | přečte / nastaví souřadnice |
itemconfigure($id,…) | změní volby objektu |
delete($id) | smaže objekt |
18Provázání proměnných
Perl/Tk propojuje widget a perlovskou proměnnou přes odkaz na skalár. Změna na jedné straně se projeví na druhé — bez ručního přepisování.
| Volba | Widget | Typ odkazu |
|---|---|---|
-textvariable | Label, Entry, Button… | skalár: \$prom |
-variable | Checkbutton, Radiobutton, Scale | skalár: \$prom |
-listvariable | Listbox (novější) | pole: \@pole |
19Události (bind)
Metoda bind naváže na widget reakci na událost — stisk klávesy, myš, změnu okna. Vzory událostí se píší v lomených závorkách, např. '<Button-1>'.
| Vzor | Událost |
|---|---|
<Button-1> | levé tlačítko myši (2 = prostřední, 3 = pravé) |
<Double-Button-1> | dvojklik |
<B1-Motion> | tažení se stisknutým tlačítkem |
<Return> | klávesa Enter |
<Key> / <KeyPress-a> | libovolná / konkrétní klávesa |
<Control-q> | Ctrl+Q |
<Enter> / <Leave> | vstup / opuštění widgetu myší |
<Configure> | změna velikosti okna |
$Tk::event s metodami x, y (souřadnice), A (znak), K (název klávesy). Alternativně předej hodnoty přes Ev('x') v poli callbacku: -command => [\&fn, Ev('x'), Ev('y')].20Dialogy
Standardní dialogová okna volají se metodami hlavního okna a vrací výsledek (text tlačítka, cestu k souboru, barvu…).
Vlastní dialog — DialogBox
| Metoda | Vrací |
|---|---|
messageBox | text stisknutého tlačítka |
getOpenFile / getSaveFile | cestu k souboru (nebo undef) |
chooseDirectory | cestu ke složce |
chooseColor | barvu #rrggbb |
DialogBox … Show | text tlačítka (vlastní obsah) |
21Fonty, barvy a obrázky
Font zadáš řetězcem "Rodina velikost styl" nebo polem. Barvy pojmenováním ('red') či hexem ('#ff8800'). Obrázky se načítají přes Photo.
22Časovače — after a repeat
after spustí kód jednorázově po zadaném počtu milisekund. repeat ho volá opakovaně — ideální pro hodiny nebo animace bez blokování smyčky.
sleepPerlovský sleep zmrazí celé GUI. Pro čekání a periodické akce vždy použij after / repeat. Naplánovanou akci zrušíš přes $mw->afterCancel($id).23configure & cget
Každý widget lze po vytvoření číst a měnit: configure nastaví volby, cget jednu volbu přečte.
24Přehled společných voleb
Tyto volby fungují napříč většinou widgetů. Krátké tvary jako -bg/-fg jsou zkratky za -background/-foreground.
| Volba | Význam | Příklad |
|---|---|---|
-text | zobrazený text | "Uložit" |
-textvariable | navázaná proměnná | \$prom |
-command | callback | sub {…} |
-bg / -background | barva pozadí | '#eee' |
-fg / -foreground | barva textu | 'navy' |
-font | písmo | "Arial 12 bold" |
-width / -height | rozměr (znaky/pixely dle widgetu) | 20 |
-relief | styl okraje | 'sunken' |
-borderwidth / -bd | šířka okraje | 2 |
-padx / -pady | vnitřní výplň widgetu | 6 |
-anchor | zarovnání obsahu | 'w' |
-justify | zarovnání víceřádkového textu | 'left' |
-state | stav widgetu | 'disabled' |
-cursor | tvar kurzoru nad widgetem | 'hand2' |
25Kompletní příklad — minimální editor
Spojení menu, textového pole a souborových dialogů do funkční mini-aplikace. Ukazuje typickou kostru programu Perl/Tk.
26Odkazy & další čtení
Dokumentace k jednotlivým widgetům je v systému jako manuálové stránky POD — čti přes perldoc.
| Zdroj | Co obsahuje |
|---|---|
| Mastering Perl/Tk (O'Reilly) | Referenční kniha Steva Lidieho a Nancy Walsh |
widget (demo program) | ukázková aplikace se všemi widgety; dodává se s modulem Tk |
POD stránky Tk::* | autoritativní popis každého widgetu a jeho voleb |
widget — je to interaktivní přehlídka všech widgetů Perl/Tk s ukázkovým kódem ke každému.