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.
Tk dispose d'une bibliothèque standard appelée Tklib (le pendant pour Tcl étant la Tcllib) exclusivement écrite en Tcl. Elle contient 35 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) a été 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 sont apparues en 1994 sous l'impulsion des développeurs du laboratoire de Sun Microsystems. Par souci de clarté, en a été prise la décision 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.
Le 26 septembre 2024 sort Tcl-Tk 9.0. Il supporte partiellement le format SVG, donne accès aux notifications, à la barre des tâches et au gestionnaire d'impression. Il permet également la rotation des objets graphiques dans le widget canvas.
Historique des versions significatives
Version
Date de sortie
Principales nouveautés
9.0
26 septembre 2024
Support partiel du format SVG
Accès au système de notification (tk sysnotify)
Accès à la barre des tâches (tk systray)
Accès au gestionnaire d'impression (tk print)
Image en arrière plan dans un frame
Gestion des métadonnées et du canal alpha des images
Onglets verticaux et horizontaux
Rotation des objets graphiques du widget canvas
8.6
Support du format PNG avec contrôle du canal alpha
Sélecteur de fonte qui tient compte de la plate-forme
Déplacement absolu des objets dans le widget canvas
Rotation de textes dans le widget canvas
Nom de couleurs aux standards du Web
8.5
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
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
Extension des options du widget canvas
Amélioration de la prise en charge des images
Gestion du quadruple clique de souris
8.1
Support d'Unicode
8.0
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
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
(en) Brent B. Welch, Practical Programming in Tcl and Tk, Prentice Hall, Upper Saddle River, NJ, USA, (ISBN0-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, (ISBN0-8186-8515-8), 1998. (Plusieurs chapitres en ligne)
(en) Cliff Flynt, Tcl/Tk for Real Programmers, Morgan Kaufman Publishers, (ISBN0-122-61205-1), 1998.
(en) Eric Foster-Johnson, Graphical applications with Tcl and Tk, M&T, (ISBN1-55851569-0), 1997.
(en) Mark Harrison et Michael McLennan, Effective Tcl/Tk Programming, Addison-Wesley, Reading, MA, USA, (ISBN0-201-63474-0), 1998.