Tk (informatică)
Tk
Tk este o bibliotecă de interfețe grafice inter-platformă . Proiectat de John Ousterhout , inițial pentru limbajul său de scriptare Tcl , astăzi se interfață cu diverse limbi, inclusiv Perl , Python , Ruby , Lua , Common Lisp , REXX , Ada , Prolog , OCaml , R , Julia , Go , Rust sau APL .
de widget - uri
Tk oferă în mod nativ o colecție de componente ale interfeței grafice ( widget-uri ):
-
label (eticheta)
-
entry( câmp text introdus)
-
listbox (listă derulantă)
-
tk_optionMenu (listare)
-
menu (meniu derulant)
-
menubutton (meniul derulant dintr-un buton)
-
scale (glisor orizontal și vertical)
-
spinbox (zona de selecție digitală)
|
-
frame (cadru)
-
labelframe (cadru cu titlu)
-
scrollbar( bara de derulare )
-
panedwindow (panou glisant)
-
text (container hipertext avansat)
-
canvas (container de obiecte grafice 2D evoluat)
-
tk_chooseColor (selector de culoare)
-
tk_chooseDirectory (selector de directoare)
-
tk_dialog (dialog modal)
-
tk_getOpenFile (selector de fișiere)
-
tk_messageBox (casetă de mesaje)
-
tk_popup( meniu contextual )
|
Fiecare widget are proprietăți care pot fi modificate în funcție de tip (dimensiune, relief, culoare, conținut, stare, eveniment).
Managementul geometriei
Pentru a controla dimensiunea și a aranja grafic widgeturile , există trei manageri de geometrie:
- grilă (aranjează widgeturile în funcție de o grilă);
- împachetați (stivați sau aranjați widgeturile unul lângă altul în ordine relativă);
- loc (aranjează widgeturile absolut).
Atâta timp cât un widget nu este asociat cu un manager de geometrie, acesta nu apare pe ecran.
Management de evenimente
Spre deosebire de un program de linie de comandă în care interacțiunea cu utilizatorul este secvențială, interfața grafică implică noțiunea de programare a evenimentelor cu altă logică. În orice moment, fiecare widget este probabil să fie afectat de acțiunea utilizatorului (evenimentul). Există evenimente simple ( clic cu mouse-ul pe un buton pentru a introduce tastatura într-un câmp) și evenimente mai complexe (navigare într-un meniu sau o combinație).
Un număr de răspunsuri automate la evenimente sunt atașate în mod implicit la fiecare widget . Acestea corespund unui management al evenimentelor de nivel scăzut în care programatorul are foarte puțin de intervenit. O buclă de evenimente are grijă de ele și le distribuie.
Apoi, prin opțiune -command, putem lega un widget la un apel de procedură sau la o comandă externă ( callback ). Dacă doriți să asociați un anumit răspuns nedefinit implicit unui widget , Tcl-Tk are un mecanism foarte flexibil datorită comenzii bind.
Exemple
- Un simplu buton albastru cu scriere albă asociată unei comenzi de ieșire.
pack [button .b
-text Quitter
-bg blue
-fg white
-command exit
]
- Un mesaj de avertizare cu tk_messageBox.
tk_messageBox -message
"Vous devez entrer une valeur entre 1 et 100" \
-type ok
-icon warning
- Un ceas digital în 6 linii de cod.
proc every
{t script
} {
eval $script
after $t [list every
$t $script]
}
pack [label .horloge
-textvariable time
-font
{Lucida 18}]
every 1000 {set ::time
[clock format
[clock seconds
] -format
%H:
%M:
%S
]}
- Afișarea caracterelor unicode greacă, rusă, ebraică, arabă, chineză și japoneză într-un widget text .
package require Tk
bind all
<Escape
> {exit}
wm title .
"Exemple Unicode"
pack [text .t
-font
{Arial 14}]
.t insert end
"
Grec\t\t \u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC\u03B3\u03BB\u03CE\u03C3\u03C3\u03B1
Russe\t\t \u0420\u0443\u0441\u0441\u043A\u0438\u0439\u044F\u0437\u044B\u043A
Hebreu\t\t \u05DD\u05D9\u05DC\u05E9\u05D5\u05E8\u05D9\u05DC\u05D9\u05D0\u05E8\u05E9\u05D9
Arabe\t\t \uFE94\uFEF4\uFE91\uFEAE\uFECC\uFEDF\uFE8D\uFE94\uFEE4\uFEE0\uFEDC\uFEDF\uFE8D
Chinois traditionnel\t \u4E2D\u570B\u7684\u6F22\u5B57
Japonais\t\t \u65E5\u672C\u8A9E\u306E\u3072\u3089\u304C\u306A,\u6F22\u5B57\u3068\u30AB\u30BF\u30AB\u30CA
"
- Utilizarea widgetului canvas pentru a afișa un poligon al cărui număr de laturi variază interactiv folosind un glisor orizontal.
package require Tk
bind all
<Escape
> {exit}
proc AffichePolygone
{w x y n
} {
set r
140; set angle
[expr {6.28318/$n}]
for {set i
0} {$i < $n} {incr i
} {
lappend l
[expr {cos($angle*$i)*$r+$x}] [expr {sin($angle*$i)*$r+$y}]
}
$w delete all
$w create polygon
$l -outline black
-width
1 -fill blue
}
set edge
3
wm title .
"Polygone"
pack [canvas .c
-background white
-width
320 -height
320]
pack [scale .sc
-from
1 -to
12 -length
240 -resolution
1 \
-orient horiz
-bd
1 -showvalue true
-variable edge
\
-command {AffichePolygone .c
160 160}]
Biblioteca standard
Tk are o bibliotecă standard numită Tklib ( omologul pentru Tcl fiind Tcllib) scrisă exclusiv în Tcl. Conține diverse module pentru reprezentarea grafică a datelor, gestionarea și afișarea textelor, tabelelor, câmpurilor de intrare specifice, precum și BWidget (o bibliotecă de widgeturi de nivel înalt).
Istoria Tk
John Ousterhout a început să proiecteze această interfață umană mașină (HMI) la sfârșitul anului 1988 în paralel cu dezvoltarea Tcl. Tk a fost influențat de sistemul HyperCard al Apple . Acesta a fost dezvoltat în C și sa bazat pe Xlib prin furnizarea de componente ale interfeței de zece numite widget - uri ( contractie a ferestrei gadget ). La acea vreme, ei lucrau doar la UNIX .
Combinația dintre Tcl și Tk (numită Tcl-Tk sau Tcl / Tk) a fost prezentată pentru prima dată în Ianuarie 1991la Conferința USENIX . A făcut posibilă depășirea complexității și a timpului de dezvoltare crescut al unei aplicații scrise cu biblioteca Motif . Ulterior, dezvoltarea Tk a fost suficient decuplată de cea a Tcl pentru a fi utilizată cu alte limbi. Versiunile pentru Windows și Macintosh au apărut în 1994 sub impulsul dezvoltatorilor laboratorului Sun Microsystems . De dragul claritatii,august 1997, s-a luat decizia de a alinia numerele de versiune ale Tk cu cele ale Tcl.
În decembrie 2007iese din Tcl-Tk 8.5. Această versiune are particularitatea de a include un motor tematic care îmbunătățește foarte mult aspectul vizual al interfeței grafice, rupând astfel cu siguranță moștenirea bibliotecii Motif. ÎnDecembrie 2012, iese din Tcl-Tk 8.6. S-a lucrat la coordonatele obiectelor din widget canvasși la suportul formatului PNG .
Istoria versiunilor semnificative
Versiune |
Data de lansare |
Principalele noutăți
|
---|
8.6 |
20 decembrie 2012 |
- Suport pentru format PNG cu control alfa al canalului
- Selector de fontă care ține cont de platformă
- Mișcarea absolută a obiectelor din widgetul pânzei
- Rotirea textelor în widgetul pânzei
- Denumirea culorii conform standardelor web
|
8.5 |
20 decembrie 2007 |
- Includerea unui motor tematic în kernel
- Fonturi anti-aliasing ( anti-aliasing ) sub X11
- Un widget textmai lin și mai armonizat pe toate platformele
- Includerea de file, casete combinate, liste de arbori și bare de progres
- Gestionarea transparenței pentru Windows
|
8.4 |
10 septembrie 2002 |
- Includerea de spinboxpanouri glisante ( panedwindow) și cadre cu titlu ( labelframe)
- Pune asimetrică pentru gestionarea geometriei
- Widgeturi compozite (text și imagine) pentru butoane, etichete și meniuri
- Gestionarea transparenței pentru imagini
|
8.3 |
10 februarie 2000 |
- Extinderea opțiunilor widgetului canvas
- Suport îmbunătățit pentru imagine
- Gestionarea cvadruplă a clicurilor mouse-ului
|
8.1 |
29 aprilie 1999 |
|
8.0 |
18 august 1997 |
- Aspect nativ pentru platformele Macintosh și Windows
- Interfață nouă pentru widget menu
- Noul mecanism de gestionare a fonturilor
- Includerea aplicațiilor externe în Tk sub Unix
- Suport pentru imagini din widget text
- Funcția Tk în mediul sigur Safe-Tcl
- Alinierea numerelor de versiune Tk cu numerele de versiune Tcl
|
4.2 |
16 octombrie 1996 |
- Rescrieți managerul de geometrie ( grid)
- Widgeturi standardizate pentru selectorul de fișiere, selectorul de culori și casetele de mesaje
- Prima versiune pentru Windows și Macintosh
|
4.1 |
21 aprilie 1996 |
- Noul manager de geometrie ( grid)
- Performanță îmbunătățită a widgetului text
- Prima versiune pentru Windows și Macintosh
|
4.0 |
1 iulie 1995
|
- Suport pentru formate de imagine XPM și GIF
- Extinderea opțiunilor widgetului text
- O mai bună compatibilitate cu Motif
|
3.0 |
Decembrie 1992
|
- Exportați în Postscript conținutul widgetuluicanvas
- O mai bună gestionare a culorii
|
2.2 |
August 1992
|
- Widget text
- Îmbunătățirea widgetului canvas
- Așteptați o comandă de eveniment ( tkwait)
- Opțiuni -statepentru a dezactiva un widget
- Opțiuni noi pentru câmpurile de introducere
|
Cuvinte rezervate
bell labelframe tk_bisque ttk::checkbutton ttk_vsapi
bind listbox tk_chooseColor ttk::combobox winfo
bindtags loadTk tk_chooseDirectory ttk::entry wm
bitmap lower tk_dialog ttk::frame
button menu tk_focusFollowsMouse ttk::image
canvas menubutton tk_focusNext ttk::intro
checkbutton message tk_focusPrev ttk::label
clipboard option tk_getOpenFile ttk::labelframe
colors options tk_getSaveFile ttk::menubutton
console pack tk_menuSetFocus ttk::notebook
cursors panedwindow tk_messageBox ttk::panedwindow
destroy photo tk_optionMenu ttk::progressbar
entry place tk_popup ttk::radiobutton
event radiobutton tk_setPalette ttk::scale
focus raise tk_textCopy ttk::scrollbar
font scale tk_textCut ttk::separator
frame scrollbar tk_textPaste ttk::sizegrip
grab selection tkerror ttk::spinbox
grid send tkvars ttk::style
image spinbox tkwait ttk::treeview
keysims text toplevel ttk::widget
label tk ttk::button ttk_image
Note și referințe
-
„ https://www.tcl.tk/software/tcltk/8.6.html ” (Accesat la 6 februarie 2021 )
-
(în) „ Tcl / Tk 8.6.11 ELIBERAT ” ,4 ianuarie 2021(accesat la 6 februarie 2021 )
Anexe
Bibliografie
- John K. Ousterhout, Hypergraphics and Hypertext in Tk , The X Resource, Issue Five, 1993
- Cameron Laird, Kathryn Soraiz, Tk stabilește standardul , UnixInsider 8/4/2000. [1]
- Kathryn Edwards, AZ a limbajelor de programare: Tcl , Computerworld, mai 2009. [2]
Cărți
-
(fr) Bernard Desgraupes, Tcl / Tk - Learning and Reference , Vuibert, ( ISBN 2-7117-8679-X ) , 2002.
-
(ro) John K. Ousterhout, Tcl and the Tk Toolkit , Addison-Wesley, Reading, MA, SUA, ( ISBN 0-201-63337-X ) , 1994. (Proiect disponibil online )
-
(ro) Brent B. Welch, Practical Programming in Tcl and Tk , Prentice Hall, Upper Saddle River, NJ, SUA, ( ISBN 0-13-038560-3 ) , 2003. (Mai multe capitole online )
-
(ro) J. Adrian Zimmer, Tcl / Tk for Programmers , IEEE Computer Society, distribuit de John Wiley și Sons, ( ISBN 0-8186-8515-8 ) , 1998. (Mai multe capitole online )
-
(ro) Cliff Flynt, Tcl / Tk for Real Programmers , Morgan Kaufman Publishers, ( ISBN 0-122-61205-1 ) , 1998.
-
(ro) Eric Foster-Johnson, Aplicații grafice cu Tcl și Tk , M&T, ( ISBN 1-55851569-0 ) , 1997.
-
(ro) Mark Harrison și Michael McLennan, Programare eficientă Tcl / Tk , Addison-Wesley, Reading, MA, SUA, ( ISBN 0-201-63474-0 ) , 1998.
-
(ro) Mark Harrison (ed.), Tcl / Tk Tools , O'Reilly Media, ( ISBN 1-56592-218-2 ) , 1997.
Articole similare
linkuri externe
Cele mai utilizate biblioteci și extensii