Pour les articles homonymes, voir Tk (informatique) (homonymie).
{{Infobox Logiciel
Tk est une bibliothèque d'interfaces graphiques flexible, facile à apprendre,
Multiplate-forme et extensible. Conçu à l'origine pour le
Langage de script Tcl, il s'interface aujourd'hui avec d'autres langages tels que
Perl,
Python,
Ruby,
Lua,
Common Lisp, REXX,
Ada,
Prolog,
OCaml,
R ou
APL.
Tk existe aussi pour les navigateurs web sous la forme d'un Plugin, Tcl plugin, qui permet d'exécuter des tclets (applets écrits en Tcl-Tk).
Les widgets
Tk propose nativement une collection de composants d'interface graphique (widgets) :button (bouton poussoir)checkbutton (case à cocher)radiobutton (Bouton radio)label (étiquette)entry (champ de texte en entrée)listbox (liste défilante)tk_optionMenu (liste)menu (menu déroulant)menubutton (menu déroulant à partir d'un bouton)scale (curseur horizontal et vertical)spinbox (zone de sélection numérique)
| frame (cadre)labelframe (cadre avec titre)scrollbar (Barre de défilement)panedwindow (panneau coulissant)text (conteneur hypertexte évolué)canvas (conteneur d'objets graphiques 2D évolué)tk_chooseColor (sélecteur de couleur)tk_chooseDirectory (sélecteur de répertoire)tk_dialog (boîte de dialogue modale)tk_getOpenFile (sélecteur de fichier)tk_messageBox (boîte de message)tk_popup (Menu contextuel)
|
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 widget 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
programation é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.
<source lang="tcl"> pack </source>
- Un message d'avertissement avec
tk_messageBox
.
<source lang="tcl"> tk_messageBox -message "Vous devez entrer une valeur entre 1 et 100" \\
-type ok -icon warning
</source>
- Une horloge digitale en 6 lignes de code.
<source lang="tcl"> proc every {t script} {
eval $script
after $t
} pack every 1000 {set ::time -format %H:%M:%S]} </source>
- Affichage de caractères Unicode grecs, russes, hébreux, arabes, chinois et japonais dans un widget
text
.
<source lang="tcl"> package require Tk bind all <Escape> {exit}
wm title . "Exemple Unicode" pack .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 " </source>
- Utilisation du widget
canvas
pour afficher un polygone dont le nombre de côtés varie interactivement à l'aide d'un curseur horizontal.
<source lang="tcl"> package require Tk bind all <Escape> {exit}
proc AffichePolygone {w x y n} {
set r 140; set angle
for {set i 0} {$i < $n} {incr i} { lappend l } $w delete all $w create polygon $l -outline black -width 1 -fill blue } set edge 3 wm title . "Polygone" pack pack </source>
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).
Anecdotes
Tcl-Tk est souvent utilisé pour développer des
prototypes d'applications fenêtrées. Celles-ci devant ensuite être réécrites dans un langage
compilé. Cependant, il est arrivé plusieurs fois que le prototype en question soit suffisamment abouti pour devenir tout bonnement l'application finale.
Histoire de Tk
John Ousterhout a commencé à concevoir cette 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 dizaines 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) fût présentée la première fois en janvier 1991 à 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 librairie 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 soucis de clarté, en août 1997, la décision fût prise d'aligner les numéros de version de Tk sur ceux de Tcl.
En décembre 2007 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 librairie Motif.
Annexes
Historique des versions significatives
Version | Date de sortie | Principales nouveautés |
---|
8.5 | 20 décembre 2007 | - Inclusion d'un moteur de thèmes dans le noyau
- Fontes anti-crénelées (anti-aliasées) sous X11
- Un widget
text plus fluide et harmonisé sous toutes les plates-formes - Inclusion des onglets, des boîtes combinées, des listes arborescentes et des barres de progression
- Gestion de la transparence pour les fenêtres
|
8.4 | 10 septembre 2002 | - Inclusion des
spinbox , des panneaux coulissants (panedwindow ) et des cadres avec titre (labelframe ) - Calage asymétrique pour la gestion de la géométrie
- Widgets composites (texte et image) pour les boutons, les labels et les menus
- Gestion de la transparence pour les images
|
8.3 | 10 février 2000 | - Extension des options du widget
canvas - Amélioration de la prise en charge des images
- Gestion du quadruple clique de souris
|
8.1 | 29 avril 1999 | |
8.0 | 18 août 1997 | - Aspect natif pour les plates-formes Macintosh et Windows
- Nouvelle interface pour le widget
menu - Nouveau mécanisme pour la gestion des fontes
- Inclusion d'applications externes dans Tk sous Unix
- Support des images dans le widget
text - Tk fonction dans l'environnement sécurisé Safe-Tcl
- Alignement des numéros de version de Tk sur ceux de Tcl
|
4.2 | 16 octobre 1996 | - Réécriture du gestionnaire de géométrie (
grid ) - Widgets standardisés pour le sélecteur de fichier, le sélecteur de couleur et les boîtes de message
- Première version pour Windows et Macintosh
|
4.1 | 21 avril 1996 | - Nouveau gestionnaire de géométrie (
grid ) - Amélioration des performances du widget
text - Première version pour Windows et Macintosh
|
4.0 | 1 juillet 1995 | - Support des formats d'image XPM et GIF
- Extension des options du widget
text - Meilleure compatibilité avec Motif
|
3.0 | Décembre 1992 | - Export en PostScript du contenu du widget
canvas - Meilleure gestion des couleurs
|
2.2 | Août 1992 | - Widget
text - Amélioration du widget
canvas - Commande d'attente d'un événement (
tkwait ) - Options
-state pour neutraliser un widget - Nouvelles options pour les champs en entrée
|
Librairies et extensions les plus utilisées
Mots réservés
<source lang="tcl"> bell labelframe tk_bisque ttk::checkbutton bind listbox tk_chooseColor ttk::combobox bindtags loadTk tk_chooseDirectory ttk::entry 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::scrollbar focus raise tk_textCopy ttk::separator font scale tk_textCut ttk::sizegrip frame scrollbar tk_textPaste ttk::style grab selection tkerror ttk::treeview grid send tkvars ttk::widget image spinbox tkwait winfo keysims text toplevel wm label tk ttk::button </source>
Références
- John K. Ousterhout, Hypergraphics and Hypertext in Tk, The X Resource, Issue Five, 1993
- Cameron Laird, Kathryn Soraiz, Tk sets the standard, UnixInsider 8/4/2000. [#]
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.
Liens externes