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.
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 ).
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 :
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!
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.
wish
sans argument, et sous l'invite de wish tapez :
source exemple1.tclnous 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 !
.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 !
Nous parlerons donc plus en détails d'extensions réalisées en pur Tcl et facile à intégrer à vos applications :
A télécharger à l'adresse suivante :
http://www.multimania.com/droche/tkballoon/
On peut trouver le widget arbre à l'adresse suivante :
http://tobit.hwaci.com/sw/tk/treepi.html
On peut trouver la combobox à l'adresse suivante :
http://www1.clearlight.com/~oakley/tcl/combobox/index.html
On peut trouver le widget notebook à l'adresse suivante :
http://tobit.hwaci.com/sw/tk/nbpi.html
On peut trouver le sélecteur à l'adresse suivante :
http://www.multimania.com/droche/tkgetdir/
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.
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