Referenční příručka · verze Tk 804.x

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.

Tkinter vs. Tk„Tkinter“ je název pythonní vazby na Tk. V Perlu se toolkit jmenuje prostě Tk. Koncepty (widgety, pack/grid, volby s pomlčkou) jsou stejné, jen syntaxe je objektová a perlovská: $rodic->Widget(...).

Instalace

SystémPříkaz
CPANcpan Tk nebo cpanm Tk
Debian / Ubuntusudo apt install perl-tk
Fedorasudo dnf install perl-Tk
WindowsStrawberry Perl: cpan Tk (má kompilátor v sobě)

Ověření, že modul funguje a jakou máš verzi:

VerzeAktuální řada je 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.

StrukturaVzorec je vždy $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, grid nebo place.
Nemíchej správceV jednom kontejneru (rodiči) používej vždy jen jednoho správce. Kombinace 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.

VolbaVýznam
-side'top' (výchozí), 'bottom', 'left', 'right'
-fillroztažení: 'x', 'y', 'both', 'none'
-expand1 = zabrat volné místo navíc
-padx / -padyvnější odsazení v pixelech
-ipadx / -ipadyvnitřní odsazení
-anchorzarovná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.

VolbaVýznam
-row / -columnpozice v mřížce (číslováno od 0)
-rowspan / -columnspanpřes kolik řádků/sloupců se buňka roztáhne
-stickypřilepení ke stranám buňky: 'nsew', 'ew', 'w' …
-padx / -padyodsazení 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.

VolbaVýznam
-x / -yabsolutní pozice v pixelech
-relx / -relyrelativní pozice 0.0–1.0 vůči rodiči
-relwidth / -relheightrelativní velikost 0.0–1.0
-anchorke 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.

Změna textu za běhuBuď navaž -textvariable => \$prom a měň proměnnou, nebo volej $label->configure(-text => "nový text").

08Button

Tlačítko spouští při stisknutí kód předaný ve volbě -command (obvykle anonymní podprogram sub {…}).

VolbaVýznam
-commandkód spuštěný při stisknutí
-state'normal', 'disabled', 'active'
-reliefvzhled okraje: 'raised' 'flat' 'sunken' 'ridge' 'groove' 'solid'
-image / -bitmapobrázek místo textu

09Entry

Jednořádkové vstupní pole. Hodnotu čteš metodou get nebo přes navázanou proměnnou -textvariable.

Metoda / volbaVýznam
$e->getvrátí obsah pole
$e->delete(0,'end')vymaže obsah
$e->insert('end',"txt")vloží text na pozici
-showmaskovací znak (heslo)
-state'normal' 'disabled' 'readonly'
-validaterež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'.

Indexy Textu'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 verzi 804V Tk 804 vrací 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.

15Optionmenu & NoteBook

Optionmenu je rozbalovací seznam voleb. NoteBook (z Tk::NoteBook) tvoří panely se záložkami.

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í).

MetodaVytvoří / udělá
createLinečáru (i lomenou), volby -arrow -width -fill
createRectangleobdélník
createOvalelipsu / kruh
createPolygonmnohoúhelník
createTexttext
createImageobrá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í.

VolbaWidgetTyp odkazu
-textvariableLabel, Entry, Button…skalár: \$prom
-variableCheckbutton, Radiobutton, Scaleskalár: \$prom
-listvariableListbox (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>'.

VzorUdá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
Údaje o událostiUvnitř callbacku je k dispozici $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

MetodaVrací
messageBoxtext stisknutého tlačítka
getOpenFile / getSaveFilecestu k souboru (nebo undef)
chooseDirectorycestu ke složce
chooseColorbarvu #rrggbb
DialogBox … Showtext 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.

Nikdy nepoužívej 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.

VolbaVýznamPříklad
-textzobrazený text"Uložit"
-textvariablenavázaná proměnná\$prom
-commandcallbacksub {…}
-bg / -backgroundbarva pozadí'#eee'
-fg / -foregroundbarva textu'navy'
-fontpísmo"Arial 12 bold"
-width / -heightrozměr (znaky/pixely dle widgetu)20
-reliefstyl okraje'sunken'
-borderwidth / -bdšířka okraje2
-padx / -padyvnitřní výplň widgetu6
-anchorzarovnání obsahu'w'
-justifyzarovnání víceřádkového textu'left'
-statestav widgetu'disabled'
-cursortvar 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.

ZdrojCo 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
Ukázková galeriePo instalaci modulu spusť v terminálu program widget — je to interaktivní přehlídka všech widgetů Perl/Tk s ukázkovým kódem ke každému.