L'ECRITURE D'INTERFACE GRAPHIQUE EN TCL/TK

  Il existe aujourd'hui de nombreuses solutions pour écrire des programmes avec interface graphique, des plus anciennes comme Athena ou Motif aux plus récentes comme GTK ( Gimp Toolkit ) ou QT ( du monde KDE ) , en passant par des librairies plus exotiques comme Forms.

  Je voudrais cependant démontrer dans cet article , l'extrême facilité avec laquelle on peut réaliser des programmes graphiques en Tcl/Tk.

Tcl/Tk qu'est ce que c'est ?

  Tcl , un acronyme pour Tool Command Language , est souvent décrit comme un langage de scripts , similaire au shell, mais il s'agit en fait d'un véritable langage de programmation , interprété , comparable en fonctionnalité à Perl.

  Bien que peu adapté au calculs mathématiques , Tcl est très puissant pour tous les traitements de chaîne de caractères, et bien que très simple d'utilisation , il dispose de toutes les fonctionnalités nécessaires pour créer des applications complexes.

  Tcl est étroitement associé à un Toolkit Graphique dénommé Tk, ce qui lui donne une dimension bien supérieure à celle d'un simple langage de programmation. Cette librairie graphique connaît un tel succès qu'elle est également disponible pour d'autre langage comme Perl ou Python, nous verrons plus loin comment l'on peut utiliser avec du C/C++.

  Il ne faut pas oublier de mentionner , outre la facilité d'utilisation, et la puissance , la troisième caractéristique majeure de Tcl/Tk : c'est un langage multi plates-formes , disponible sur quasiment tous les Unix, sur Windows 9x/NT , ainsi que sur Mac !

  Un même programme peut donc tourner sans modification ni recompilation sur toutes les cibles. C'est extrêmement important quand on travaille comme moi dans un environnement hétérogène, cela permet d'utiliser Linux comme plate-forme de développement , travail pour lequel il excelle, et de pouvoir également distribuer son travail sur Windows ou Mac .

  Il ne faut pas oublier de mentionner, cerise sur le gâteau , l'existence d'un plugin Tcl pour Netscape ou IE , donnant la possibilité à une application Tcl de s'exécuter dans le navigateur, comme une applet ( on dit Tclet ).

Un petit exemple

  Comme il se doit, pour démontrer les possibilités d'un langage de programmation , nous allons commencer par un petit exemple :

  Tout d'abord vérifions que Tcl/Tk est bien installé sur notre système, l'interpréteur graphique se nomme wish, sur un système Unix il suffit donc de taper :
type wish
pour obtenir quelque chose du style
wish is /usr/bin/wish
si vous obtenez :
wish : not found
c'est vraisemblablement que Tcl/Tk n'est pas installé , sous Linux cependant, cela à peu de chance de se produire , toute les distributions que je connaît intègre Tcl en standard ! Sous Windows , vérifier simplement que l'entrée Tcl figure dans le menu programme .

  Si tout est OK , créons un fichier exemple1.tcl

label .lab0 -text "Bonjour tout le monde\nEn Tcl/Tk"
button .bou0 -text "OK" -command { exit }
pack .lab0 .bou0

puis exécutons wish exemple1.tcl, nous voyons apparaître la fenêtre :

Voila, juste 3 lignes pour créer cette fenêtre !

  Quelque explications: chaque entité graphique (widget) est nommée de manière hiérarchique , chaque parent contenant (visuellement) tous ses enfants, la séparation s'effectuant par un point, le 1er point représentant la fenêtre principale; cela donne :
.parent0.parent1.....parentn.widget

  Dans notre exemple , nous avons donc crée un label 'lab0' et un bouton 'bou0' tout deux situés dans la fenêtre principale, en précisant le texte affiché avec l'option -text et dans le cas du bouton l'action à effectuer avec l'option -command, ici juste 'exit' mais cela peut être un ensemble quelconque de commande Tcl.

  Cependant créer les widgets ne suffit pas , il faut indiquer comment les placer dans la fenêtre parent, Tk dispose de 3 possibilités de placement le 'pack' qui les place à la suite les uns des autres , ( par défaut de haut en bas ) , le 'place' qui permet de positionner suivant des coordonnées x,y absolue ou relative; et enfin le 'grid' qui arrange les widgets dans un tableau en lignes et colonnes.

  Dans notre exemple , nous avons utilisé le cas le plus simple: pack sans option, le bouton apparaît donc en dessous du label!

Les différents widgets

  Nous n'allons pas dans cet article , détailler le fonctionnement de chaque widget, il existe pour cela de bon livres ainsi qu'une documentation très conséquente, on peut notamment citer :
 Nous nous contenteront donc d'une liste expliquant les différentes possibilités que nous offre Tk:

  Pour chaque cas le principe est le même, on crée le widget en lui précisant les options voulues, puis on le 'place' en utilisant un des trois pack, place ou grid.

  Une fois créé , on peut récupérer les caractéristiques d'un widget par la commande :
widget_name cget options
et on peut changer ces caractéristiques comme suit :
widget_name configure options
où les options sont les même que lors de la création.

  En utilisant ainsi les widgets comme des briques élémentaires d'un jeu de lego, il est très facile et très rapide de créer des interfaces graphiques complètes.

Développer, Débugger

  Tcl/Tk étant un langage interprété, on gagne déjà une étape par rapport au classique écrire-compiler-tester , de plus on dispose naturellement de quelque facilités sympathiques :
reprenons notre exemple, lancez wish sans argument, et sous l'invite de wish tapez :
source exemple1.tcl
nous voyons apparaître la même application que précédemment , avec tout de même une différence, on a toujours la main sous wish !
tapez alors
.lab0 configure -background red

vous voyez que dynamiquement on peut changer la configuration des widgets , l'application continuant de tourner. On peut de la même manière consulter et modifier les variables , voire rajouter ou enlever des widgets.

  Il faut signaler que sous emacs on dispose d'un mode Tcl, qui permet de lancer l'application et d'avoir accès à l'invite de wish, sans quitter emacs.

  Cependant , malgré ces diverses fonctionnalités qui aident grandement au debug Tcl/Tk ne propose pas en standard de fonctions avancés de debug. Qu'a cela ne tienne , nous avons tuba !.

  Tuba est une application , elle même écrite en Tcl, qui permet de poser des points d'arrêt , faire du pas à pas , consulter et modifier les variables , tout ceci de manière graphique.

  Tuba est disponible à l'adresse suivante :
http://www.doitnow.com/~iliad/Tcl/tuba/

  Bien qu'il soit très facile d'écrire une interface graphique avec Tk, il faut quand même l'écrire, et il est bien pratique d'avoir un builder d'interface pour créer et positionner visuellement les widgets. Si un tel builder n'existe pas en standard dans Tcl/Tk , il y a néanmoins une autre solution , vtcl :

  Vtcl est un builder d'application , lui même également écrit en Tcl, permettant grâce à quelques clics , de créer son interface , positionner les widgets éditer leur caractéristiques , couleur, relief , comportement, etc.... vtcl permet même d'éditeur le code de chaque fonction associé au widgets.

  Vtcl est disponible à l'adresse suivante :
http://www.neuron.com/stewart/vtcl/

  Il est important de faire remarquer que ces logiciels étant écrits en Tcl , il tournent sur toutes les plates-formes , on à donc un environnement de développement identique quelque soit la plate-forme choisie !

Les Extensions

  Tk fournit tous les widgets de base , et permet de les combiner , mais il peut être intéressant de disposer de quelques objets plus évolués. Il existe pour ce faire de nombreuses extensions a Tcl/Tk, on peut citer parmi les plus connues , Tix, Incr Tcl, Blt , mais il y en a bien d'autres. Cependant toutes ses extensions on l'inconvénient de nécessiter une installation plus ou moins lourde, et pas forcément disponible sur toutes les plates-formes .

  Nous parlerons donc plus en détails d'extensions réalisées en pur Tcl et facile à intégrer à vos applications :

  Voila un aperçu de quelques extensions bien utiles , mais on peut évidemment en trouver bien d'autre , je vous conseille de visiter les sites :
http://www.scriptics.com/ ou
http://sunscript.sun.com/
dédiés a Tcl sur lequel vous pourrez télécharger les dernières versions de Tcl/Tk ainsi que de nombreuses extensions.

Tcl/Tk et le C/C++

  Il y a de nombreux avantages aux langages interprétés , il y a également quelques inconvénients : en premier lieu , les sources sont forcement livrés avec l'application ce qui peut poser problème, ensuite , cela peut introduire certaines lenteurs. De plus Tcl/Tk ne permet pas de créer des structures de données très complexes comme on peut le faire en C ou C++.

  Pas de panique , il y a aussi une solution pour cela :
Embedded Tk couramment appelé ET est un outil permettant de créer des exécutables autonomes à partir d'une mixture de C ou C++ et de Tcl/Tk. Avec ET il est possible d'appeler un script Tcl/Tk dans une routine C , ou d'appeler une routine C dans un script Tcl/Tk.

ET est vraiment très simple à utiliser , et permet d'utiliser à la fois les facilités de Tcl/Tk pour les interfaces graphiques et les traitements des chaînes de caractères, et la puissance du C là où elle est nécessaire.

On peut trouver ET à l'adresse suivante :
http://www.hwaci.com/sw/et

Pour conclure

  La communauté des programmeurs Tcl est très active et de plus en plus de nouveaux logiciels apparaissent régulièrement , alors , a vos clavier ...
Page principale