Tcl/Tk
Tk (z anglického Toolkit – „sada nástrojů“) je multiplatformní knihovna základních prvků grafického uživatelského rozhraní, kterou vyvinul John Ousterhout jako rozšíření interpretovaného programovacího jazyka Tcl. Tk poskytuje sadu Tcl příkazů určených k vytváření ovládacích prvků a dalších komponent grafického uživatelského rozhraní a provádění různých akcí s nimi. Knihovna Tk je distribuovaná jako otevřený software a byla přenesena na většinu implementací systémů Linux, OS X, Unix a Microsoft Windows. Pomocí speciálních knihoven může být knihovna Tk použita i v jiných programovacích jazycích, například v Perlu, Pythonu nebo Ruby. Většina těchto jazyků používá Tcl jako most pro Tk.[1] Od verze 8 mají widgety „nativní“ vzhled prostředí příslušného operačního systému, to znamená, že grafické prvky vypadají stejně jako prvky standardní pro tento OS. Od verze 8.5 je možné pro kreslení prvků použít engine s podporou motivů nazvaný Ttk.[2] Existuje také několik rozšíření, které implementují Drag and drop mezi aplikacemi v Tk a externími aplikacemi, nepravoúhlá okna a podobně. Komponenty jsou uspořádány v hierarchické struktuře. Z pohledu aplikace existuje hlavní nebo primární okno, ve kterém jsou vytvořena podřízená okna. Podřízená okna mohou zase působit jako rodiče ve vztahu k jiným oknům atd. Rozmístění komponentů řídí správce rozvržení nebo geometrie (anglicky geometry manager), který určuje velikost komponent a jejich umístění na obrazovce. Aplikace Tk, stejně jako většina aplikací v grafických prostředích, jsou programy řízené událostmi. Tk komponenty většinu událostí zpracovávají automaticky, což zjednodušuje vytváření aplikací. Spuštění Tk skriptu obvykle začíná vytvářením komponent a jejich umístěním pomocí správce rozvržení, po němž skript přidružuje obslužné rutiny událostí se součástmi. Poté, co interpret dokončí analýzu příkazů odpovědných za inicializaci uživatelského rozhraní, přejde do smyčky událostí. Od tohoto okamžiku začne aplikace reagovat na akce uživatele. Pro Tk existují další sady komponent, například BWidget[3], Tix[4] nebo incr Widgets[5]. Výhodou využití BWidget je, že není třeba kompilovat konkrétní platformu (jeho kód je „čisté“ Tcl). Tcl, Tclsh, Tk a WishStandardním interpretem Tcl je program Tk skriptyTk skript je normální skript v jazyce Tcl; zavedením balíčku Tk však přibudou příkazy pro vytváření prvků a ovládání grafického uživatelského rozhraní neboli widgetů. Zatímco ve „standardním“ Tcl se veškerá činnost provádí z hlavního programu (těla skriptu), v Tk se v něm pouze definují jednotlivé prvky rozhraní a jejich vazby na události. Vlastní komunikace s uživatelem se uskutečňuje po provedení posledního příkazu těla skriptu, kdy program vstoupí do smyčky událostí. Smyčka událostí je realizována příkazem WidgetyTk poskytuje následující příkazy pro vytváření widgetů:
Jména widgetůPrvním parametrem příkazů, které vytvářejí prvky grafického rozhraní, je jméno prvku. Protože toto jméno je strukturováno podobně jako úplné jméno souboru, bývá v angličtině označováno stejným slovem pathname. Zatímco v úplném jménu souboru jsou jednotlivé části oddělovány znaky lomítko nebo zpětné lomítko, ve jménech prvků v Tcl/Tk se jednotlivé části cesty oddělují znaky tečka ( Například tlačítko Správce okenV grafických aplikacích hraje důležitou roli komunikace se správcem oken (window managerem), což je aplikace, která se v systému stará o „dekoraci“ oken Lze také například předepsat zavření okna uživatelem: wm protocol .x WM_DELETE_WINDOW ExitWindowX Ukázka programu v Tcl/TkNásledující program otevře dvě okna – hlavní o velikosti 320 x 200 pixelů obsahující nápis package require Tk
wm title . "Hlavní okno"
wm minsize . 320 200
label .l -text "Nápis v hlavním okně"
pack .l -padx 40 -pady 20
set w2 [toplevel .w2]
wm title $w2 "Druhé okno"
pack [label $w2.l -text "Nápis v druhém okně"] -padx 10 -pady 10
Příkaz Příkaz Program nedefinuje žádný prostředek pro své ukončení. Ukončí se zavřením hlavního okna. Vytváření widgetůTk obsahuje řadu widgetů potřebných k vytvoření desktopových aplikací, jako jsou tlačítka, nabídky, texty, rámečky, štítky atd. Widgety jsou vytvořeny pomocí odpovídajících příkazů, kde prvním argumentem je cesta cesty widgetu. Tyto příkazy navíc také akceptují možnosti specifické pro widget, například: button .btn -text "Konec" -bg blue -fg white -command {exit} Tlačítko "Konec" po svém stisknutí provede příkaz Správci rozvrženíAby byl grafický prvek vidět, je nutné použít správce rozvržení, který jej umístí do nadřízeného widgetu a zajistí jeho zobrazení. Tk poskytuje tři správce rozvržení, které se liší přístupem k umisťování widgetů do rodičovských oken:
Nejoblíbenější (a nejjednodušší k použití) metodou rozmísťování prvků je pack. Pro zobrazení widgetu pack .btn Při určování, kde se mají jednotlivé prvky zobrazit, se správci rozvržení řídí jmény widgetů. Ze jména se snaží odvodit, jaké je jeho nadřazené okno. Toto přiřazení lze v rámci jednoho KonfiguraceVětšinu parametrů, které jsou widgetu přiřazeny při jeho vytváření, lze měnit za běhu. Jméno, které widget dostane při svém vytvoření, lze použít jako příkaz (což je v Tcl často používaný přístup, například při implementaci tříd a objektů v Incr Tcl). Tento příkaz má dva „podpříkazy“ (které bývají nazývány metodami, protože podobně jsou metody implementovány v Incr Tcl): .btn configure -text "Ukončit aplikaci" Čtení hodnot widgetůTk používá několik metod pro propojení widgetů s akcemi, které se podobají mechanismu signálu a slotů. Tyto mechanismy zahrnují:
UdálostiKromě přímého propojení proměnných nebo akcí s widgety umožňuje Tk také navázání akcí na události, které jsou zpravidla vysílány konkrétním widgetem. Událost obvykle popisuje text uzavřený mezi znaky Události lze rozdělit na standardní a virtuální. Standardní události jsou události „pevně zabudované“ do knihovny Tk, které přímo souvisejí s událostmi přicházejícími z okna systému. Jedná se například o stisknutí klávesy na klávesnici (např. bind .x <MouseWheel> "MouseScroll %D" pak při použití kolečka myši nad widgetem .x (widget, který reaguje na kolečko myši, je jiný v systému Windows – kde jde o okno, které má focus – zatímco v X11 je to okno, ve kterém je ukazatel myši), bude vyvolaný příkaz MouseScroll, který jako argument dostane hodnotu delta udávající velikost posunutí. Kromě toho existují také virtuální události, které může definovat program příkazem TileOd října 2006 obsahuje Tcl/Tk balíček Tile, který dovoluje se více přiblížit přirozenému vzhledu operačního systému a dokonce i knihoven, např. Aqua, výchozímu vzhledu systému Windows XP, dokonce i TileQt PříkladyMinimalistický program pro čmárání myší v Tcl[6] používá widget canvas, ke kterému jsou navázány akce kliknutí levým tlačítkem myši a pohyb se stisknutým levým tlačítkem myši. Vazby se definují v proceduře proc doodle {w {color black}} {
bind $w <1> [list doodle'start %W %x %y $color]
bind $w <B1-Motion> {doodle'move %W %x %y}
}
Kliknutím na levé tlačítko se vytvoří objekt čára, jehož počáteční a koncový bod jsou shodné: proc doodle'start {w x y color} {
set ::_id [$w create line $x $y $x $y -fill $color]
}
Při pohybu myši se stisknutým levým tlačítkem se čára prodlouží: proc doodle'move {w x y} {
$w coords $::_id [concat [$w coords $::_id] $x $y]
}
Hlavní program má kromě zavedení balíčku Tk pouze tři řádky: package require Tk
pack [canvas .c -bg white] -fill both -expand 1
doodle .c
bind .c <Double-3> {%W delete all}
První příkaz vytvoří a zobrazí kreslicí plochu, druhý ji přiřadí výše definované akce. Poslední příkaz definuje, že dvojitým kliknutím pravým tlačítkem myši se kresba smaže. Podpora UnicodeNásledující program zobrazí texty v češtině, řečtině, ruštině, hebrejštině, arabštině, čínštině a japonštině ve widgetu text: package require Tk
bind all <Escape> {exit}
wm title . "Exemple Unicode"
pack [text .t -font {Arial 14}]
.t insert end "
Čeština:\t\t Příliš žluťoučký kůn úpěl ďábelské ódy
Řecká alfabeta:\t\t \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA \u03AC\u03B3\u03BB\u03CE\u03C3\u03C3\u03B1
Azbuka:\t\t \u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043A
Hebrejské písmo:\t\t \u05DD\u05D9\u05DC\u05E9\u05D5\u05E8\u05D9\u05DC\u05D9\u05D0\u05E8\u05E9\u05D9
Arabské písmo:\t\t \uFE94\uFEF4\uFE91\uFEAE\uFECC\uFEDF\uFE8D\uFE94\uFEE4\uFEE0\uFEDC\uFEDF\uFE8D
Tradiční čínština:\t\t \u4E2D\u570B\u7684\u6F22\u5B57
Japonské písmo:\t\t \u65E5\u672C\u8A9E\u306E\u3072\u3089\u304C\u306A,\u6F22\u5B57\u3068\u30AB\u30BF\u30AB\u30CA
"
Digitální hodinyDigitální hodiny vytvořené na 6 řádcích kódu: package require Tk
proc every {t script} {
eval $script
after $t [list every $t $script]
}
pack [label .hodiny -textvariable time -font {Lucida 18}]
every 1000 {set ::time [clock format [clock seconds] -format %H:%M:%S]}
OdkazyReferenceV tomto článku byly použity překlady textů z článků Tk na ruské Wikipedii, Tk na polské Wikipedii, Tk (Toolkit) na německé Wikipedii a Tk (informatique) na francouzské Wikipedii.
Související články
Externí odkazy
|
Portal di Ensiklopedia Dunia