Wikipedista:Kolarp/Pískoviště/Tcl/Tk

Tento článek je o používání toolkitu Tk v jazyce Tcl. O toolkitu Tk obecně pojednává článek Tk (framework).
Tk
Logo
VývojářJohn Ousterhout
Aktuální verze8.6.6 (2016-07-27)
Operační systémmultiplatformní
Vyvíjeno vC
Typ softwaruknihovna ovládacích prvků GUI
Licencepodobná BSD
Webhttp://www.tcl.tk/

Tk (anglicky Toolkit – „sada nástrojů“) je multiplatformní knihovna základních prvků grafického uživatelského rozhraní, distribuovaná jako otevřený software.

Tk vyvinul John Ousterhout jako rozšíření interpretovaného programovacího jazyka Tcl. Pomocí speciálních knihoven může být Tk použito i v jiných programovacích jazycích[1], například v Perlu, Pythonu nebo Ruby. Většina těchto jazyků používá Tcl jako most pro Tk.

Tk je přenesen na většinu implementací systémů Linux, OS X, Unix a Microsoft Windows. Od verze Tcl/Tk 8 má grafické rozhraní „nativní“ vzhled 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 bylo možné použít engine pro kreslení prvků s podporou motivů – Ttk[2]. Kromě toho existuje několik rozšíření, které poskytují Drag and drop mezi aplikací v Tk a externími aplikacemi, nepravoúhlá okna a podobně.

Tk poskytuje sadu Tcl příkazů určených k vytváření komponent a provádění různých akcí s nimi. Komponenta je okno v grafickém rozhraní, které má určitý vzhled a provádí určité funkce.

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. Komponenty jsou řízeny správci rozvržení (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 automaticky zpracovávají většinu událostí, což zjednodušuje vývojářům 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 aplikace začne 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, Tk a Wish

editovat

Wish (Windowing Shell) není nic jiného než interpret Tcl s vestavěným Tk. V této podobě je obvykle poskytován na systémech splňujících standard POSIX , ale v posledních verzích už není velký rozdíl, zda se jako interpret používá wish nebo tclsh, kromě toho, že v prvním případě se automaticky provede package require Tk. Balíček Tk pak bude načten z dynamické knihovny.

Tk skript je normální skript v jazyce Tcl, ale balíček Tk ukládá další předpoklady. Na rozdíl od "normálního" Tcl, je úkolem Tk skriptu pouze definování toho, co má dělat, pro vytvoření základních předpokladů o chování programu. Vlastní provedení aplikace se provádí až po dokončení skriptu, protože program neskončí, jak se to děje za normálních podmínek, ale vstoupí do smyčky událostí. Spuštění této smyčky lze také provést ručně příkazem tkwait; Tento příkaz bude implicitně proveden na konci skriptu. Aplikace může být ukončena normálně, ukončením příkazu tkwait nebo explicitním provedením příkazu exit.

Jména oken v Tk mají tvar cesty (podobající se úplnému jménu souboru), v nichž jsou jednotlivé složky odděleny tečkami. Hlavní okno aplikace typu toplevel (které nemá rodiče) s názvem .. Je možné vytvořit i další toplevel okna, a okno . je možné zavřít. Pokud je však . jediné existující okno toplevel, pak jeho uzavření ukončí příkaz tkwait a tím skončí celá aplikace.

Jména widgetů jsou uspořádána do cesty podobným způsobem jako hierarchie oken (tato hierarchie může být vynechána, ale nedoporučuje se to). Proto pokud máme tlačítko umístěné přímo v okně toplevel, můžeme jej nazvat .btn. V hlavním okně však můžeme umístit rámeček, řekněme .f1 a právě uvnitř tohoto tlačítka - pak by měl být nazván .f1.btn.

Widgety a jejich vytváření

editovat

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 pro věci specifické pro widget, například:

button .btn -text "Klikni na mě!" -command {exit}

Tlačítko "Klikni na mě!" A po jeho stisknutí provede příkaz exit, tj. ukončení aplikace. Aby tlačítko bylo vidět, je nutné jej umístit do nadřízeného widgetu a tak je zobrazit. Tk nabízí tři možnosti pro umístění widgetů do rodičovských oken:

  • place - umísťuje widget na zadanou pozici vzhledem k nadřazenému oknu
  • pack - umísťuje widgety vedle sebe nebo pod sebou k okrajům nadřízeného widgetu
  • grid - umísťuje widgety do obdélníkové mřížky

Nejoblíbenější (a nejjednodušší k použití) metodou rozmísťování prvků je pack. Takže pro zobrazení widgetu v rodičovském okně .:

pack .btn

Hierarchie v jménech widgetů je velmi důležitá při umístění. Každé okno má přesně to, co je jeho nadřazeným oknem, takže příkazy vám řeknou, kam ho umístit. V tomto příkazu však můžete zadat další nadřazené okno pro umístění widgetu.

Konfigurace

editovat

Každý widget, bez ohledu na parametry, které mu jsou 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 nejdůležitější "podpříkazy" (které bývají nazývány metodami, protože podobně jsou metody implementovány v Incr Tcl): cget a configure. Metoda cget slouží k načtení hodnotu parametru widgetu, configure k jeho modifikaci. Výše vytvořené tlačítko tak může být v průběhu zpracování změněno příkazem:

.btn configure -text "Ukončit aplikaci"

Události

editovat

Tk, kromě přímého propojení s widgety, jak jsme viděli na příkladu tlačítek, nabízí také propojení s událostmi. Událost obvykle popisuje text v <...>. Událost je vysílána konkrétním widgetem. Pomocí příkazu bind lze zaregistrovat vlastní akci, kterou chcete provést při události.

Události lze rozdělit na standardní a virtuální. Standardní události jsou události napsané "pevně" do knihovny Tk a 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ř. <Return>, <Control-C>), myši (např. <Double-Button-1>, <MouseEnter>, <MouseWheel>). Tyto události také často poskytují zvláštní argumenty zvláštním způsobem. Tyto argumenty jsou označeny znakem % a odpovídajícím znakem značky v následném příkazu. Např. Pokud to uděláme:

bind .x <MouseWheel> "MouseScroll %D"

Toto je případ kolize myši nad widgetem .x (připomínám, že widget kolečka myši se liší v systému Windows - okno zaostření - a okno X11, na kterém je ukazatel myši), MouseScroll , který získá požadovanou delta v offsetu.

Kromě toho existují také virtuální události, které lze definovat sami ("add event"). Takové události se zapisují v << ... >>. Například widgety, které implementují textový editor, mohou definovat událost <<Paste>>. Virtuální události je možné generovat programem event generate.

Vázání událostí

editovat

Tk používá několik metod pro propojení widgetů s akcemi, které se podobají mechanismu signálu a slotů. Tyto mechanismy zahrnují:

  • události popsané výše
  • parametr -command, která přiřazuje příkaz k výchozí akci widgetu (například kliknutí na tlačítko)
  • parametry -variable a -textvariable, které váží widgetu s proměnnou; změna widgetu způsobí změnu hodnoty proměnné a naopak

Správce oken

editovat

V Tk je velmi důležitá komunikace s tzv. window managerem, což je aplikace, která se v systému stará o "dekoraci" oken toplevel. Tuto komunikaci zajišťuje příkaz wm. Umožňuje vyžádat operace, které zajišťuje správce oken -např. minimalizaci, maximalizaci, ikonizaci, zjištění a nastavení velikosti okna a registrace událostí, které pocházejí od správce oken. Lze například předepsat zavření okna uživatelem:

wm protocol .x WM_DELETE_WINDOW ExitWindowX

Nedávno byl vyvinut balíček Tile, který umožňuje lépe se integrovat s přirozeným vzhledem vašeho operačního systému a dokonce i knihoven, mj. Aqua, výchozí vzhled systému Windows XP a dokonce i TileQt.

Reference

editovat

V tomto článku byly použity překlady textů z článků Tk na ruské Wikipedii a Tk na polské Wikipedii.

Související články

editovat

Externí odkazy

editovat