Movatterモバイル変換


[0]ホーム

URL:


Přeskočit na obsah
WikipedieWikipedie: Otevřená encyklopedie
Hledání

Tcl/Tk

Z Wikipedie, otevřené encyklopedie
ikona
Tato stránka je kandidátem napřesunutí naWikiknihy.
Na stránky tohoto projektu se umísťují svobodné a otevřené návody, manuály či učebnice. Na Wikipedii článek může zůstat, pouze pokud bude upraven doencyklopedické podoby.
Tento článek je o používání toolkitu Tk v jazyceTcl. O toolkitu Tk obecně pojednává článekTk (framework).
Tk
Logo
VývojářJohn Ousterhout
Aktuální verze8.6.6 (2016-07-27)
Operační systémmultiplatformní
Vyvíjeno vC
Typ softwaruknihovnaovládacích prvků GUI
Licencepodobná BSD
Webhttp://www.tcl.tk/
Některá data mohou pocházet zdatové položky.

Tk (zanglickéhoToolkit – „sada nástrojů“) jemultiplatformníknihovna základních prvkůgrafického uživatelského rozhraní, kterou vyvinulJohn Ousterhout jako rozšířeníinterpretovanéhoprogramovacího jazykaTcl.

Tk poskytuje saduTcl příkazů určených k vytvářeníovládacích prvků a dalších komponentgrafického uživatelského rozhraní a provádění různých akcí s nimi.

KnihovnaTk je distribuovaná jakootevřený software a bylapřenesena na většinu implementací systémůLinux,OS X,Unix aMicrosoft Windows. Pomocí speciálních knihoven může být knihovna Tk použita i v jiných programovacích jazycích, například vPerlu,Pythonu neboRuby. 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éhooperač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 (anglickygeometry 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 Wish

[editovat |editovat zdroj]

Standardním interpretemTcl je programtclsh; pro interpretaci skriptů v Tcl/Tk slouží příkazwish (Windowing Shell). Na systémech standarduPOSIX je wish interpretTcl s vestavěnýmTk; na jiných systémech se oba příkazy liší jen tím, žewish automaticky provedepackage require Tk, čímž zajistí načtení balíčku Tk zdynamické knihovny.

Tk skripty

[editovat |editovat zdroj]

Tk skript je normální skript v jazyceTcl; 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í neboliwidgetů.

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říkazemtkwait, který se implicitně spouští na konci těla skriptu, může však být vyvolán i explicitně. Aplikace končí buď ukončením příkazutkwait nebo explicitním provedením příkazuexit.

Widgety

[editovat |editovat zdroj]

Tk poskytuje následující příkazy pro vytváření widgetů:

  • toplevelokno, ve kterém zobrazují ostatní prvky; první okno se jménem. se automaticky otevře při zavedení Tk
  • canvas – plátno – plocha, na kterou lze rozmístit další prvky; používá se pro kreslení geometrických objektů nebo pokud je potřeba část okna scrollovat pomocí posuvníku
  • panedwindow – okno s posuvnými částmi; umožňuje rozdělení okna na podokna, jejichž velikost lze měnit posouváním rámečků
  • frame – rámeček (viditelný nebo neviditelný), kterým lze ohraničit prvky nebo jejich skupiny
  • labelframe – rámeček přerušený nápisem
  • label – nápis (etiketa)
  • entry – okénko pro zadání jednoho řádku textu; text může být předvyplněn
  • text – okno pro editaci víceřádkového textu (může být předvyplněn)
  • button – obdélníkovétlačítko, na kterém může být nápis nebo obrázek; při kliknutí se zobrazí zamáčknutí tlačítka a provede se určitá akce
  • checkbuttonzaškrtávací pole – malá čtvercová ploška, která při klikání mění stav mezi zapnuto a vypnuto
  • radiobuttonpřepínač – skupina kruhových plošek podobných zaškrtávacím polím, kliknutí na jednu z nich dojde k jejímu zapnutí a vypnutí všech ostatních ve skupině
  • menu – klasickánabídka několika možností, kliknutím se provede určitá akce; může být víceúrovňové
  • listboxseznam několika možností uspořádaných podobně jako menu; kliknutím se však místo vyvolání akce vybere příslušná možnost
  • comboboxkombinované pole – prvek, který se chová jako kombinace entry a listboxu
  • menubutton – tlačítko, které se stisknutím rozvine na menu
  • scrollbarposuvník, pomocí kterého se lze posouvat na část plátna, textu nebo prvků, které se nemohly zobrazit pro nedostatek prostoru
  • progressbar – posuvník ukazující průběh nějaké akce
  • scale – posuvník sloužící k zadání hodnoty z určitého intervalu
  • spinbox – entry pro zadání hodnoty doplněný šipkami, kterými lze přidávat nebo ubírat
  • message – otevře nové okno, ve kterém je zobrazena zpráva
  • notebook – přepínání několika dialogů na stejné ploše pomocí záložek (oslích uší)

Jména widgetů

[editovat |editovat zdroj]

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 slovempathname. Zatímco v úplnémjménu souboru jsou jednotlivé části oddělovány znakylomítko nebozpětné lomítko, ve jménech prvků vTcl/Tk se jednotlivé části cesty oddělují znaky tečka (.). Tečkou musí jméno také začínat; samotná tečka označuje výchozí prvek celé hierarchie, kterým je hlavní okno automaticky vytvořené zavedením balíčku Tk.

Například tlačítkob_yes umístěné v rámečkuf_top v okněw2 by se mělo jmenovat.w2.f_top.b_yes. Protože Tcl/Tk nevyžaduje, aby jména prvků obsahovala i jména rámečků, lze použít i jméno.w2.b_yes. V tomto případě je však třeba explicitně zadat, že tlačítko se má zobrazit v rámečku.w2.f_top.

Správce oken

[editovat |editovat zdroj]

V grafických aplikacích hraje důležitou roli komunikace sesprávcem oken (window managerem), což je aplikace, která se v systému stará o „dekoraci“ okentoplevel. Tuto komunikaci zajišťuje příkazwm. Umožňuje vyžádat operace, které zajišťuje správce oken – např. nastavení velikosti okna, jeho minimalizaci, maximalizaci, ikonizaci, zjištění velikosti okna, a registrace událostí, které pocházejí od správce oken.

Lze také například předepsat zavření okna uživatelem:

wm protocol .x WM_DELETE_WINDOW ExitWindowX

Ukázka programu v Tcl/Tk

[editovat |editovat zdroj]

Následující program otevře dvě okna – hlavní o velikosti 320 x 200 pixelů obsahující nápisNápis v hlavním okně s titulkem (v rámu okna)Hlavní okno a druhé s titulkemDruhé okno obsahující nápisNápis v druhém okně, okolo kterého je ve všech směrech prostor 10 pixelů:

packagerequireTkwmtitle."Hlavní okno"wmminsize.320200label.l-text"Nápis v hlavním okně"pack.l-padx40-pady20setw2[toplevel.w2]wmtitle$w2"Druhé okno"pack[label$w2.l-text"Nápis v druhém okně"]-padx10-pady10

Příkazwm title změní text v záhlaví okna awm minsize předepíše jeho minimální velikost (šířka 320pixelů a výška 200pixelů); příkazlabel připraví nápis, který se provedením příkazupack zobrazí uvnitř okna.

Příkaztoplevel vytvoří druhé okno, jehož jméno, resp. cestu.w2 uložíme do proměnnéw2. Dalším příkazem změníme text v jeho záhlaví. Poslední řádek ukazuje, jak je možné zkombinovat příkazlabel, který vytvoří nápis, a příkazpack, který zajistí jeho zobrazení.

Program nedefinuje žádný prostředek pro své ukončení. Ukončí se zavřením hlavního okna.

Vytváření widgetů

[editovat |editovat zdroj]

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říkazexit, tj. ukončení aplikace.

Správci rozvržení

[editovat |editovat zdroj]

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:

  • place – umisťuje widget na zadanou pozici v rámci nadřazeného okna
  • pack – umisťuje widgety vedle sebe nebo pod sebou k okrajům nadřízeného widgetu
  • grid – umisťuje widgety do obdélníkové mřížky

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

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 jednohotoplevel okna změnit použitím parametru-in.

Konfigurace

[editovat |editovat zdroj]

Vě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ů vIncr 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):cget aconfigure. Metodacget slouží k načtení hodnoty vybraného parametru widgetu,configure k její modifikaci nebo k načtení hodnot všech parametrů. 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"

Čtení hodnot widgetů

[editovat |editovat zdroj]

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

  • parametr-command, který přiřazuje k výchozí akci widgetu (například kliknutí na tlačítko) Tcl příkaz
  • parametry-variable a-textvariable, které propojují widget s proměnnou; změna widgetu způsobí změnu hodnoty proměnné a naopak; na změnu stavu proměnné lze navázat akci příkazemtrace add variable
  • události popsané dále

Události

[editovat |editovat zdroj]

Kromě 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< a>. Pomocí příkazubind lze události přiřadit vlastní akci.

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ř.<Return>,<Control-C>), myši (např.<Double-Button-1>,<MouseEnter>,<MouseWheel>). Tyto události často poskytují speciálním způsobem další argumenty. Argumenty jsou označeny znakem % a odpovídajícím znakem v následném příkazu. Pokud např. použijeme příkaz

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říkazemadd event. Jména virtuálních událostí se zapisují mezi<< ... >>. Widgety, které implementují textový editor, mohou například definovat událost<<Paste>>. Virtuální události je možné generovat příkazemevent generate.

Tile

[editovat |editovat zdroj]

Od ří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říklady

[editovat |editovat zdroj]

Minimalistický 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čítkemmyši a pohyb se stisknutým levým tlačítkem myši. Vazby se definují v proceduředoodle:

procdoodle{w{colorblack}}{bind$w<1>[listdoodle'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é:

procdoodle'start{wxycolor}{set::_id[$wcreateline$x$y$x$y-fill$color]}

Při pohybu myši se stisknutým levým tlačítkem se čára prodlouží:

procdoodle'move{wxy}{$wcoords$::_id[concat[$wcoords$::_id]$x$y]}

Hlavní program má kromě zavedení balíčku Tk pouze tři řádky:

packagerequireTkpack[canvas.c-bgwhite]-fillboth-expand1doodle.cbind.c<Double-3>{%Wdeleteall}

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 Unicode

[editovat |editovat zdroj]

Následující program zobrazí texty v češtině, řečtině, ruštině, hebrejštině, arabštině, čínštině a japonštině ve widgetu text:

packagerequireTkbindall<Escape>{exit}wmtitle."Exemple Unicode"pack[text.t-font{Arial14}].tinsertend"Č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\u03B1Azbuka:\t\t \u0420\u0443\u0441\u0441\u043A\u0438\u0439 \u044F\u0437\u044B\u043AHebrejské písmo:\t\t \u05DD\u05D9\u05DC\u05E9\u05D5\u05E8\u05D9\u05DC\u05D9\u05D0\u05E8\u05E9\u05D9Arabské písmo:\t\t \uFE94\uFEF4\uFE91\uFEAE\uFECC\uFEDF\uFE8D\uFE94\uFEE4\uFEE0\uFEDC\uFEDF\uFE8DTradiční čínština:\t\t \u4E2D\u570B\u7684\u6F22\u5B57Japonské písmo:\t\t \u65E5\u672C\u8A9E\u306E\u3072\u3089\u304C\u306A,\u6F22\u5B57\u3068\u30AB\u30BF\u30AB\u30CA"

Digitální hodiny

[editovat |editovat zdroj]

Digitální hodiny vytvořené na 6 řádcích kódu:

packagerequireTkprocevery{tscript}{eval$scriptafter$t[listevery$t$script]}pack[label.hodiny-textvariabletime-font{Lucida18}]every1000{set::time[clockformat[clockseconds]-format%H:%M:%S]}

Odkazy

[editovat |editovat zdroj]

Reference

[editovat |editovat zdroj]

V tomto článku byly použitypřeklady textů z článkůTk na ruské Wikipedii,Tk na polské Wikipedii,Tk (Toolkit) na německé Wikipedii aTk (informatique) na francouzské Wikipedii.

  1. Tcl Wiki | Languages with a Tk binding
  2. Ttk
  3. BWidget
  4. Tix
  5. incr Widgets.incrtcl.sourceforge.net [online]. [cit. 2017-10-21].Dostupné v archivu pořízeném z originálu dne 2012-11-17. 
  6. http://wiki.tcl-lang.org/9625

Související články

[editovat |editovat zdroj]

Externí odkazy

[editovat |editovat zdroj]
Portály:Svobodný software
Citováno z „https://cs.wikipedia.org/w/index.php?title=Tcl/Tk&oldid=24299706
Kategorie:
Skryté kategorie:

[8]ページ先頭

©2009-2025 Movatter.jp