Tk (informatique)
Tk est une bibliothèque d'interfaces graphiques multiplate-forme. Conçue par John Ousterhout, à l'origine pour son langage de script Tcl, elle s'interface aujourd'hui avec divers langages dont Perl, Python, Ruby, Lua, Common Lisp, REXX, Ada, Prolog, OCaml, R, Julia, Go, Rust ou APL.
Développé par | Tcl Core Team et al. |
---|---|
Dernière version | 8.6.13 ()[1] |
DĂ©pĂ´t | core.tcl.tk/tk |
Écrit en | C |
Système d'exploitation | Multiplateforme |
Environnement | Multiplate-forme |
Type | Bibliothèque d'interface graphique |
Licence | BSD |
Site web | www.tcl.tk |
Les widgets
Tk propose nativement une collection de composants d'interface graphique (widgets) :
|
|
Chaque widget possède des propriétés modifiables selon le type (taille, relief, couleur, contenu, état, événement).
Gestion de la géométrie
Pour contrôler la dimension et agencer graphiquement les widgets, il existe trois gestionnaires de géométrie :
- grid (dispose les widgets selon une grille) ;
- pack (empile ou dispose cĂ´te-Ă -cĂ´te les widgets selon un ordre relatif) ;
- place (dispose les widgets de manière absolue).
Tant qu’un widget n’est pas associé à un gestionnaire de géométrie, il n’apparaît pas à l'écran.
Gestion des événements
À la différence d'un programme en ligne de commande où l'interaction avec l'utilisateur est séquentielle, l'interface graphique fait intervenir la notion de programmation événementielle avec une autre logique. À tout moment, chaque widget est susceptible d'être affecté par l'action de l'utilisateur (l'événement). Il existe des événements simples (clic de souris sur un bouton, saisie au clavier dans un champ) et des événements plus complexes (navigation dans un menu ou une liste déroulante).
À chaque widget est attaché par défaut un certain nombre de réponses automatiques à des événements. Celles-ci correspondent à une gestion des événements de bas niveau où le programmeur n'a que très peu à intervenir. Une boucle événementielle les prend en charge et les répartit.
Ensuite, par l'intermédiaire de l'option -command
, on peut lier un widget à un appel de procédure ou une commande extérieure (callback).
Si l'on souhaite associer à un widget une réponse particulière non définie par défaut,
Tcl-Tk dispose d'un mécanisme très flexible grâce à la commande bind
.
Exemples
- Un simple bouton bleu avec écriture blanche associé à une commande pour quitter.
pack [button .b -text Quitter -bg blue -fg white -command exit]
- Un message d'avertissement avec
tk_messageBox
.
tk_messageBox -message "Vous devez entrer une valeur entre 1 et 100" \
-type ok -icon warning
- Une horloge digitale en 6 lignes de code.
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]}
- Affichage de caractères unicode grecs, russes, hébreux, arabes, chinois et japonais dans 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
"
- Utilisation du widget
canvas
pour afficher un polygone dont le nombre de côtés varie interactivement à l'aide d'un curseur horizontal.
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}]
Bibliothèque standard
Tk dispose d'une bibliothèque standard appelée Tklib (le pendant pour Tcl étant la Tcllib) exclusivement écrite en Tcl. Elle contient divers modules pour la représentation graphique de données, la gestion et l'affichage de textes, les tables, les champs d'entrée spécifiques ainsi que les BWidget (une bibliothèque de widgets de haut niveau).
Histoire de Tk
John Ousterhout a commencé à concevoir cette Interface Homme-machine (IHM) à la fin de l'année 1988 parallèlement au développement de Tcl. Tk a subi l'influence du système HyperCard d'Apple. Il a été développé en C et était basé sur Xlib en fournissant une dizaine de composants IHM appelés widgets (contraction de window gadget). À cette époque, ils ne fonctionnaient que sous UNIX.
La combinaison de Tcl et Tk (appelé Tcl-Tk ou Tcl/Tk) fut présentée la première fois en à la Conférence USENIX. Il permettait de s'affranchir de la complexité et du temps de développement accru d'une application écrite avec la bibliothèque Motif. Par la suite, le développement de Tk était suffisamment découplé de celui de Tcl pour être utilisé avec d'autres langages. Les versions pour Windows et Macintosh apparurent en 1994 sous l'impulsion des développeurs du laboratoire de Sun Microsystems. Par souci de clarté, en , la décision fut prise d'aligner les numéros de version de Tk sur ceux de Tcl.
En sort Tcl-Tk 8.5. Cette version a la particularité d'inclure un moteur de thèmes qui améliore grandement l'aspect visuel de l'interface graphique rompant ainsi définitivement avec l'héritage de la bibliothèque Motif.
En , sort Tcl-Tk 8.6. Un travail a été effectué sur les coordonnées des objets dans le widget canvas
et sur le support du format PNG.
Historique des versions significatives
Version | Date de sortie | Principales nouveautés |
---|---|---|
8.6 |
| |
8.5 |
| |
8.4 |
| |
8.3 |
| |
8.1 |
| |
8.0 |
| |
4.2 |
| |
4.1 |
| |
4.0 | 1er juillet 1995 |
|
3.0 | décembre 1992 |
|
2.2 | août 1992 |
|
Mots réservés
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
Notes et références
Annexes
Bibliographie
Livres
- (fr) Bernard Desgraupes, Tcl/Tk - Apprentissage et Référence, Vuibert, (ISBN 2-7117-8679-X), 2002.
- (en) John K. Ousterhout, Tcl and the Tk Toolkit, Addison-Wesley, Reading, MA, USA, (ISBN 0-201-63337-X), 1994. (Draft disponible en ligne)
- (en) Brent B. Welch, Practical Programming in Tcl and Tk, Prentice Hall, Upper Saddle River, NJ, USA, (ISBN 0-13-038560-3), 2003. (Plusieurs chapitres en ligne)
- (en) J. Adrian Zimmer, Tcl/Tk for Programmers, IEEE Computer Society, distribué par John Wiley and Sons, (ISBN 0-8186-8515-8), 1998. (Plusieurs chapitres en ligne)
- (en) Cliff Flynt, Tcl/Tk for Real Programmers, Morgan Kaufman Publishers, (ISBN 0-122-61205-1), 1998.
- (en) Eric Foster-Johnson, Graphical applications with Tcl and Tk, M&T, (ISBN 1-55851569-0), 1997.
- (en) Mark Harrison et Michael McLennan, Effective Tcl/Tk Programming, Addison-Wesley, Reading, MA, USA, (ISBN 0-201-63474-0), 1998.
- (en) Mark Harrison (ed), Tcl/Tk Tools, O'Reilly Media, (ISBN 1-56592-218-2), 1997.
Articles connexes
Liens externes
- (en) Site officiel
- (fr) Wiki Tcl-Tk
- (en) Wiki Tcl-Tk
Bibliothèques et extensions les plus utilisées
- BLT (ensemble de widgets pour la représentation de données)
- TkZinc (canvas 2D étendu basé sur OpenGL)
- TkPath (canvas au format SVG)
- Img (gestion des formats d'image)
- TkTreeCtrl (listes arborescentes)
- Tcl3d (un conteneur 3D OpenGL)
- Tile (moteur de thèmes)