Tuteur Tk
     - gilles Hunault,
Angers 1998

novalid      

euh... j'attendaiss des carottes pour commencer
mais puisque vous êtes là, allons-y !

tk, c'est...

tk est un sur-ensemble de tcl qui permet de construire des applications graphiques comme les boutons, les menus, les panneaux, les listes de sélection. La commande pack permet de positionner les objets définis. La commande bind permet d'associer des touches à des objets, comme par exemple ESC pour quitter.

Les objets ont souvent un texte, initialisé par l'option -text, une couleur de fond, initialisée par -bg, une couleur d'avant-plan, initialisée par -fg, une police de caractères initialisée par -font. On associe une commande à un objet avec l'option -command. On modifie un attribut par la commande configure.

Les objets sont définis suivant une hiérarchie, un peu comme pour les répertoires, avec un point au lieu d'un antislash.

le bouton, vous dis-je !

Voici un premier exemple : un bouton apparait sur l'écran, qui dit "cliquez-moi". Si on s'exécute, il dit "merci !" puis disparait au bout de quelques instants, ce qui correspond aux écrans suivants (la fenêtre a pour titre BOUTON car le programme était dans le fichier bouton.tcl) :

Le texte, brut de fonderie est le suivant

        proc tuezle { } {
          .lepoumon configure -text " Merci !"
          .lepoumon configure -fg yellow -bg red
          after 7000 exit
        } ; # fin proc tuezle

        button .lepoumon  -text "Cliquez-moi" \
                          -font { Arial 16 bold } \
                          -fg blue -bg yellow -command  tuezle
        pack   .lepoumon

La commande button crée le bouton, la commande pack l'affiche. Si on clique la procédure tuezle est exécutée. Elle change le texte et les couleurs du bouton avec configure puis disparait avec exit au bout de 7000 millisecondes.

label de Cadix et ses soeurs

Une étiquette (label en anglais) permet d'afficher du texte. On peut donc y mettre un titre, un commentaire en bas de fenêtre, etc. L'objet entry permet, quant à lui, la saisie d'un texte, l'objet text est une fenêtre de texte, un canevas (canvas) est une zone qui permet de tracer à l'aide coordonnées, un cadre (frame) est un "conteneur" pour tous les autres objets. Ainsi la petite application illustrée par la figure suivante

est constituée par une frame nommée .th, qui contient un label .th.titre en jaune sur fond rouge, un canevas .th.ci de fond blanc qui lui-même contient en bas et à droite un bouton de sortie .th.ci.fin, nommé exit, en jaune sur fond bleu, une "entry" .th.ci.ent sous les deux labels de fond vert .th.ci.tit1 et .th.ci.tit2.

menus à la carte

Un menu traditionnel se fait avec

menu [nom du menu] -type menubar menubutton [nom de rubrique] -text ... -font ... -fg ... -underline ... -relief ... -menu ...

ce qui nous donne ici

avec les instructions ############### procédure de choix d'un fichier proc ouvreFichier {} { set initd [file join "c:" "users" "gh" "crs"] set choixr "Choisissez un répertoire " set ghft { { "Programmes" {"*.tcl" "*.tk" "*.tix"} } { "Tous" {"*.*"} } } set repb [tk_getOpenFile -initialdir "$initd" -title $choixr -filetypes $ghft] # suite du traitement du fichier $repb # à mettre ici } ; # fin de proc ouvreFichier ############### menu principal set police { Arial 12 bold } menu .carte -type menubar pack .carte -side top ############### rubrique Fichier menubutton .carte.debut -text Fichier \ -font $police -fg blue -bg yellow \ -activeforeground yellow -activebackground blue \ -underline 0 -relief solid \ -menu .carte.debut.m pack .carte.debut -side left -ipadx 5 -ipady 5 ############### options de la rubrique Fichier menu .carte.debut.m -type normal -tearoff no .carte.debut.m add command -label " Ouvrir " \ -underline 1 -font $police -accelerator "Ctrl+O" \ -command ouvreFichier .carte.debut.m add command -label " Fermer " \ -underline 1 -font $police .carte.debut.m add separator .carte.debut.m add command -label " Imprimer " \ -underline 1 -font $police .carte.debut.m add separator .carte.debut.m add command -label " Quiter " \ -underline 1 -font $police -command exit ############### rubrique Restauration menubutton .carte.milieu -text " Restauration rapide à toute heure " \ -font $police -fg blue -bg yellow \ -activeforeground yellow -activebackground blue \ -underline 1 -relief solid \ -menu .carte.milieu.m pack .carte.milieu -side left -ipadx 5 -ipady 5 ############### options de la rubrique Restauration menu .carte.milieu.m -type normal -tearoff no .carte.milieu.m add command -label " Entrée (pâté ou crudités)" \ -underline 1 -font $police .carte.milieu.m add command -label " Plat du Jour" \ -underline 1 -font $police .carte.milieu.m add separator .carte.milieu.m add command -label " Plateau de Fromages " \ -underline 12 -font $police .carte.milieu.m add separator .carte.milieu.m add cascade -label " Dessert " -menu .carte.milieu.m.dessert \ -underline 1 -font $police ############### sous-options de l'option Dessert de la rubrique Restauration menu .carte.milieu.m.dessert -type normal -tearoff no .carte.milieu.m.dessert add command -label " Fruits " \ -underline 1 -font $police -background white -foreground blue \ -activebackground blue -activeforeground white .carte.milieu.m.dessert add command -label " Tarte " \ -underline 1 -font $police -background white -foreground blue \ -activebackground blue -activeforeground white .carte.milieu.m.dessert add command -label " Mousses " \ -underline 1 -font $police -background white -foreground blue \ -activebackground blue -activeforeground white .carte.milieu.m.dessert add command -label " Glaces " \ -underline 1 -font $police -background white -foreground blue \ -activebackground blue -activeforeground white ############### rubrique Aide menubutton .carte.fin -text " Aide sur les plats " \ -font $police -fg blue -bg yellow \ -activeforeground yellow -activebackground blue \ -underline 1 -relief solid pack .carte.fin -side left -ipadx 5 -ipady 5 ############### touches associées bind all <q> exit bind all <Control-o> ouvreFichier

La boite de dialogue qui permet de choisir un fichier, via l'instruction set repb [tk_getOpenFile -initialdir "$initd" -title $choixr -filetypes $ghft] est la boite standard, par exemple sous Windows :

tcl, toujours et partout (et encore !)

L'un des avantages de tcl/tk est qu'on peut inclure les programmes tcl/tk dans des pages web. Le programme (ou "applet en tcl" ou "tclet") s'appelle classiquement par un "embed". Par exemple, pour inclure le programme pmc.tcl, et gérer une fenêtre en mode 800x600, on écrit dans le fichier .htm :

<embed type="application/x-tcl" src="pmc.tcl" width=800 height=600> Les instructions qui ne doivent pas être utilisées via l'interpréteur sur le web peuvent être testées avec la version du plug-in, comme le montre le texte suivant : set mplg 0 catch { set mplg $plugin(release) } ## seulement en mode non plug-in if { $mplg == 0 } { ... } Les possibilités graphiques de tcl/tk sont nombreuses et puissantes (l'utilisateur peut tracer des courbes, des arcs, lisser des objets, insérer des images, créer des lines hypertextes, déplacer les éléments graphiques à la souris, les exporter au format Postcript...). L'installation standard de tcl/tk contient de nombreuses démonstrations qui peuvent servir d'exemple, de base de départ pour de nouvelles applications. En particulier, le fichier widget.tcl contient les démonstrations suivantes : Labels, buttons, checkbuttons, and radiobuttons title Labels (text and bitmaps). {demo demo-label} Buttons. {demo demo-button} Checkbuttons (select any of a group). {demo demo-check} Radiobuttons (select one of a group). {demo demo-radio} A 15-puzzle game made out of buttons. {demo demo-puzzle} Iconic buttons that use bitmaps. {demo demo-icon} Two labels displaying images. {demo demo-image1} A simple user interface for viewing images. Listboxes title 50 states. {demo demo-states} Colors: change the color scheme for the application. A collection of famous sayings. {demo demo-sayings} Entries title Without scrollbars. {demo demo-entry1} With scrollbars. {demo demo-entry2} Simple Rolodex-like form. {demo demo-form} Text title Basic editable text. {demo demo-text} Text display styles. {demo demo-style} Hypertext (tag bindings). {demo demo-bind} A text widget with embedded windows. {demo demo-twind} A search tool built with a text widget. {demo demo-search} Canvases title The canvas item types. {demo demo-items} A simple 2-D plot. {demo demo-plot} Text items in canvases. {demo demo-ctext} An editor for arrowheads on canvas lines. {demo demo-arrow} A ruler with adjustable tab stops. {demo demo-ruler} A building floor plan. {demo demo-floor} A simple scrollable canvas. {demo demo-cscroll} Scales title Vertical scale. {demo demo-vscale} Horizontal scale. {demo demo-hscale} Menus title Menus and cascades. Menubuttons Common Dialogs title Message boxes. {demo demo-msgbox} File selection dialog. {demo demo-filebox} Color picker. {demo demo-clrpick} Miscellaneous title The built-in bitmaps. {demo demo-bitmap} A dialog box with a local grab. {demo demo-dialog1} A dialog box with a global grab. {demo demo-dialog2}

Pour finir, signalons que l'application nommée expect qui permet d'automatiser des interactions programmes/systèmes (comme se connecter automatiquement à un ordinateur distant en mode telnet, tester la répons de l'ordinateur, changer de répertoire...) est aussi écrite en tcl.

Un dernier exemple : la conversion Francs/Euros en tk.

## fichier cfe.tk # ligne du haut frame .ldh label .ldh.sefg -text " Somme en francs " -width 25 entry .ldh.sefd -width 10 -textvariable sef button .ldh.sefb -text " conversion " -command { conv $sef } bind .ldh.sefd <Return> { conv $sef } pack .ldh.sefg .ldh.sefd .ldh.sefb -side left # ligne du centre frame .ldc label .ldc.eurt -text " Valeur en euros " -width 25 label .ldc.eurv -text "" -width 20 -bg white pack .ldc.eurt .ldc.eurv -side left # ligne du bas frame .ldb label .ldb.eura -text " arrondi " -width 25 label .ldb.eurs -text "" -width 20 -bg yellow pack .ldb.eura .ldb.eurs -side left pack .ldh .ldc .ldb -side top # définition de la touche q pour quitter bind . <q> exit focus .ldh.sefd # procédure de conversion proc conv { sf } { if { [string length $sf] == 0 } { tk_messageBox -icon error -type ok \ -title " saisie incorrecte " \ -message " il faut indiquer la somme à convertir " return } set eur [expr $sf /6.55957] .ldc.eurv configure -text $eur .ldb.eurs configure -text [ format "%10.2f" $eur] } ; # fin de la procédure conv

 

 

Pour visualiser rapidement des fichiers-textes, voici une tentative de programme en Tcl/Tk nommé listgh.tcl.

 

Le lien caché sous le phare mot expect renvoie à divers programmes d'installation de tcl/tk, de ses plug-in pour le web et d'expect.