Cours TclTk - PowerPoint PPT Presentation

1 / 81
About This Presentation
Title:

Cours TclTk

Description:

Syntaxe simple et richesse des commandes de base. Langage interpr t ... En affectant une variable une liste de valeurs. set lst { {item1} ... – PowerPoint PPT presentation

Number of Views:310
Avg rating:3.0/5.0
Slides: 82
Provided by: Marc357
Category:
Tags: tcltk | affectant | cours

less

Transcript and Presenter's Notes

Title: Cours TclTk


1
Cours Tcl/Tk
  • Marcela Hernández Hoyos
  • CREATIS
  • Décembre 1999

2
Contenu
  • Quest-ce que cest ?
  • Pourquoi Tcl/Tk?
  • Comment démarrer
  • Documentation
  • Syntaxe
  • Trois parties
  • Tcl
  • Tk
  • Tcl/Tk C/C

3
Quest-ce que cest ?
Tcl / Tk
Ffqfqs fsdfqdf dfqsdf fsdfqsdsqs dsqdqsd
dqsdqd qdsdsqdq sdqsdqsd qdqsdq qdsdqsd
qdqdsqd qdqsdqsd qdqsdq Ffqfqs fsdfqdf dfqsdf
fsdfqsdsqs dsqdqsd dqsdqd qdsdsqdq sdqsdqsd
qdqsdqsdq sdqsdq qdqsdqdq qdq qdsdqsd qdqdsqd
qdqsdqsd qdqsdq Ffqfqs fsdfqdf dfqsdf
fsdfqsdsqs dsqdqsd dqsdqd qdsdsqdq sdqsdqsd
qdqsdqsdq sdqsdq qdqsdqd qdsdqsd qdqdsqd
qdqsdqsd qdqsdq f
  • Tool Command Language
  • Langage de commandes (shell)
  • Tcl librairie de commandes C interpréteur
    de commandes
  • Programmation séquentielle
  • Tclsh
  • Tool Kit
  • Extension de Tcl pour la partie application
    graphique
  • fenêtres
  • menus
  • butons,
  • Programmation événementielle
  • Wish

4
Pourquoi Tcl/Tk ?
  • Syntaxe simple et richesse des commandes de base
  • Langage interprété ?pas de compilation
  • Gratuit - Internet
  • Portabilité
  • Unix linux
  • PC Windows et Windows NT
  • MacIntosh
  • Outils de haut niveau pour la partie graphique
    (Tk)
  • Extensibilité
  • Nombreuses extensions disponibles expect, itcl,
    BLT, ...

5
Comment démarrer ?
  • Interactivement
  • tclsh -gt Tcl
  • wish -gt Tcl/Tk
  • Exemple
  • wish
  • button .button -test Essai -command exit
  • pack .button
  • Sous forme de scripts
  • Exemple essai.tcl
  • essai.tcl
  • button .button -text "Essai 2" -command exit
  • pack .button
  • wish80 essai.tcl

6
Documentation
  • Livres

7
Documentation
  • En ligne
  • Tutorial Tcl tcltutor (CD livre Flynt)
  • Exemples Tk  C\Program Files\Tcl\lib\tk8.0\dem
    os 
  • WWW
  • Fichiers
  • http//www.scriptics.com/products/tcltk/
  • Information
  • http//hegel.ittc.ukans.edu/topics/tcltk/
  • http//www.sco.com/Technology/tcl/Tcl.html
  • Manuel
  • http//www.scriptics.com/man/tcl8.0/contents.htm

8
Syntaxe utilisée dans ces notes
  • ?aaa? aaa est optionnel
  • commande erronée (erreur à ne pas faire)
  • gt le résultat dune commande tcl
  • commande tcl/tk

9
Première partie Tcl
10
Tcl Tool Command Language
  • Introduction au langage
  • Variables
  • Exécution d'une commande
  • Opérations mathématiques
  • Structures de contrôle
  • Procédures
  • Portée des variables
  • Chaînes de caractères
  • Structures de données
  • Evaluation de commandes
  • Programmation modulaire

11
Introduction au langage
  • Tcl ne manipule que des chaînes de caractères
    strings
  • Conversion numérique
  • Opérations mathématiques
  • Comparaisons
  • Syntaxe
  • command arg1 arg2 ?arg3 .argn? ?args?
  • command commande intrinsèque built-in ou
    procédure
  • arguments chaîne de caractères !
  • séparateur entre commandes et arguments espace
    ou tabulation
  • séparateur entre commandes retour à la ligne ou

12
Variables
  • set
  • set var ?valeur?
  • puts
  • puts var
  • puts "chaine"
  • set var1 20
  • set var2 var1
  • set var3 aaavar1
  • set var4 var1aaa gt erreur
  • puts var1 gt 20
  • puts var2 gt 20
  • puts var3 gt aaa20
  • set txt "Les variables var1 et var2 ont la même
    valeur "
  • puts "txt var1 var2"
  • gt Les variables var1 et var2 ont la même valeur
    20 20

13
Exécution d'une commande
  • Substitution
  • Évaluation
  • 1er mot commande
  • Vérification commande existe
  • Autres mots arguments passés à la commande
  • 1 groupement d'arguments 1 seul argument
  • Pas de sens appliqué aux mots
  • Substitutions
  • var
  • \a \b \f \n \t
  • \nouvelle ligne
  • Groupements
  • " "

14
Groupement avec " "
  • Permet des substitutions à l'intérieur des " "
  • set Z "Bogota"
  • set Z_LABEL "La capitale de Colombie est "
  • puts "Z_LABEL Z"
  • gt La capitale de Colombie est Bogota
  • Pour empêcher la substitution \
  • puts "Z_LABEL \Z"
  • gt La capitale de Colombie est Z
  • Sauf
  • \a \b \n \t
  • \nouvelle ligne

15
Groupement avec
  • Empêche les substitutions à l'intérieur des
  • set Z "Bogota"
  • set Z_LABEL "La capitale de Colombie est "
  • puts Z_LABEL Z
  • gt Z_LABEL Z
  • Sauf
  • \nouvelle ligne
  • Et si ...


" "
vil caractère ascii
puts "Z_LABEL Z" gt La capitale de Colombie
est Bogota
16
Groupement avec
  • commande arg1 arg2 arg3
  • résultat de la commande ?
    appel à une fonction

set x 2 set y 5 set z expr x y puts z
gt 10
set y set x "def" puts "set retourne la valeur
de la variable X x Y y" gt set retourne la
valeur de la variable X def Y def
  • Sauf protection avec
  • \

17
Opérations mathématiques
  • Commande expr opérande opérateur opérande
  • Opérandes
  • Valeurs numériques
  • Opérateurs
  • Variable ()
  • - !
  • /
  • -
  • ltlt gtgt
  • Fonctions mathématiques
  • cos, sin, tan
  • acos, asin, atan
  • ceil, floor
  • pow, sqrt
  • exp, log, log10
  • ...
  • Conversion de types
  • abs, double, int, round

set pi expr 2asin(1.0) gt 3.141592
18
Structures de contrôle - if switch
  • if - Comparaison numérique
  • if test1 ... elseif test2 ... else ...
  • switch - Comparaison textuelle
  • switch ?options? string pattern1 corps1 pattern2
    corps2 ... patternN corpsN
  • switch ?options? string
  • pattern1 corps1
  • pattern2 corps2
  • default corpsD
  • options -exact, -glob, -regexp, -- (fin
    d'options)

set x "ONE" switch x \ "ONE"
"puts ONE1" \ "TWO" "puts TWO2" \
"default" "puts NO_MATCH"
gt ONE1
19
Structures de contrôle - while for
  • while
  • while test
  • set i 10
  • while i gt 0
  • puts i
  • incr i -1
  • for
  • for init test reinit
  • exécuter init puis
  • si test est vrai, exécuter puis reinit, et
    ainsi de suite jusqu à test est faux
  • for set i 0 i lt 10 incr i
  • puts i

20
Procédures
  • Commande proc
  • proc name ?param1? ?? ?paramn? ?args? body
  • name le nom de la procédure
  • params la liste des paramètres avec des valeurs
    par défaut possibles
  • proc test a b 7 c toto
  • puts "a b c"
  • test Bonjour gt Bonjour 7 toto
  • test Bonjour cher gt Bonjour cher toto
  • si le dernier paramètre s'appelle args, il est
    interprété comme une liste ce qui permet de
    passer un nombre variable de paramètres
  • valeur retournée par une procédure soit le
    résultat de la dernière commande exécutée, soit
    return returnValue

21
Portée des variables
  • Variables locales
  • Définies dans une procédure ? locales à la
    procédure
  • Variables globales
  • Définies en dehors de toute procédure
  • global x
  • x est maintenant une variable globale dans cette
    procédure
  • upvar ?level? otherVar localVar
  • permet de passer des variables par référence et
    non par valeur
  • uplevel ?level? arg arg
  • croisement entre upvar et eval évalue la
    concaténations des arguments dans le contexte des
    variables de level

22
Portée des variables - Exemple
  • set x 25
  • set y 45
  • proc test ox
  • global y
  • upvar ox lx
  • set lx expr lx y
  • puts x gt25
  • test x
  • puts x gt 70

23
Manipulation de chaînes de caractères
  • Commande string
  • Commande avec sous-commandes (premier argument)
  • string lenght string
  • string index string index
  • string range string first last
  • ...
  • Comparaison textuelle "string matching"
  • string compare string1 string2
  • retourne -1, 0 ou 1 suivant que string1 est
    inférieur, égal ou supérieur à string2 du point
    de vue caractères
  • if string compare a b 0
  • puts "a et b sont identiques au niveau
    chaînes de caractères"
  • elseif a b
  • puts "a et b sont identiques au niveau
    numérique"

24
Manipulation de chaînes de caractères
  • Comparaison "pattern matching"
  • string match pattern string
  • renvoie 1 si string correspond au global pattern
  • set i "vélo"
  • if string match v i
  • puts "i correspond bien à v"
  • else
  • puts "i ne correspond pas à v"
  • regexp ?switches? exp string ?matchVar?
    ?subMatchVar ?
  • compare string avec exp et extrait des portions
    de string en fonction de exp
  • regsub ?switches? exp string subSpec varName
  • remplace une partie de string
  • subst ?-nobackslashes? ?-nocommands?
    ?-novariables? string
  • effectue les substitutions dans string, en
    fonction des switchs

25
Structures de données - Listes
chaîne de caractères
  • Création
  • En affectant à une variable une liste de valeurs
  • set lst item1 item2 item3
  • Avec la commande split
  • split string ?splitchars?
  • set lst split "item1-item2-item3" "-"
  • Avec la commande list
  • list ?arg1 arg2 ?
  • set lst list "item1" "item2" "item3"

26
Structures de données - Listes
  • Recherche d'un élément commandes lindex,
    lsearch
  • lindex list index
  • lsearch list pattern
  • lindex lst 2 gt item3
  • Nombre d'éléments commande llength list
  • Tri commande lsort list
  • Ajouter/Supprimer commandes lappend, linsert,
    concat, lreplace
  • lappend listName ?arg1 arg2 argN?
  • linsert listName index arg1 ?arg2 argN?
  • concat ?arg1 arg2 argN?
  • lreplace listName first last ?arg1 arg2 argN?
  • Parcours commande foreach
  • foreach varName list
  • pour chaque élément varName de la liste list,
    exécuter

27
Structures de données - Listes
  • set maListe list a oui b c 3 non
  • set maListeTriee lsort maListe
  • set i 1
  • foreach x maListeTriee
  • puts "Element i x"
  • incr i

a b c 3 non oui
gt
28
Structures de données - Tableaux
  • Variables indicées associative arrays
  • Se manipulent comme des variables ordinaires
  • set a(color) blue
  • set var a
  • set attr color
  • set a(attr) blue
  • puts a(color) gt blue
  • set var(attr) green
  • puts "la valeur de var(attr) est set
    var(attr)"
  • gt la valeur de a(color) est
    green

Regrouper les variables dans des arrays, surtout
si on souhaite quelles soient connues
globalement
29
Structures de données - Tableaux
  • Commande array
  • array exists arrayName
  • array names arrayName
  • array size arrayName
  • parray arrayName pattern
  • array get arrayName
  • array set arrayName list
  • Parcours
  • "foreach" sur la liste résultante de la commande
    array names
  • foreach id array names mon_tableau
  • puts "mon_tableau(id) has ID id"
  • commandes
  • array startsearch arrayName
  • array nextement arrayName searchID
  • array anymore arrayName searchID
  • array donesearch arrayName searchID

30
Evaluation de commandes - eval
  • Commande eval
  • eval arg1 ?arg2 ?
  • Évalue une liste de chaînes de caractères et
    essaie de les exécuter
  • Quand?
  • Pour forcer une deuxième interprétation
  • proc myProc a b c puts expr (ab)c
  • set l list 3 4 5
  • myProc l gt no value given for parameter "b" to
    "myProc"
  • eval myProc l gt 35
  • Pour créer interactivement de nouvelles commandes
  • set cmd puts "Evaluating a puts"
  • puts "CMD IS cmd"
  • eval cmd

31
Evaluation de commandes - subst
  • Commande subst
  • subst string
  • Effectue le pas de substitution sans évaluation
    de commandes, à l'exception de
  • Quand ?
  • Pour mettre le nom d'une variable dans une autre
    variable
  • set a "alpha"
  • set b a
  • puts a b
  • puts "a b"
  • puts " subst a b"
  • puts " subst "a b""

gt a b gt alpha a gt alpha a gt alpha alpha
32
Programmation modulaire
  • Commande source
  • source fileName
  • lit un fichier script tcl et l'exécute

scripts .tcl
  • Commandes exec et open
  • exec ?options? arg1 ?arg2? ?argN?
  • exécute un nouveau programme comme un
    sous-processus
  • open progName ?accès?
  • exécute un nouveau programme et connecte
    l'entrée/sortie standard au descripteur du fichier

App.
logiciels .exe
  • Commande load
  • load fileName
  • charge le code binaire d'une fichier et
    l'incorpore dans l'interpréteur

librairies dynamiques .dll / .so
33
Exemple open
  • set tempFile "c/tmp/tmp.tcl"
  • set outfl open tempFile w
  • puts outfl
  • set len gets stdin line
  • if len lt 5 exit -1
  • for set i len i gt 0 incr i -1
  • append l2 string range line i i
  • puts l2
  • exit
  • close outfl

set logi c/Tcl/bin/tclsh80.exe set io open
"logi tempFile" r puts io "Cette chaine
sera inversee." flush io puts "Inversee
line" gtCette chaine sera inverse gtInversee
eesrevni ares eniahc etteC
34
Deuxième partie Tk
35
Tk Tool Kit
  • Applications graphiques interactives (GUIs)
  • Programmation événementielle vs programmation
    procedurale
  • Objets graphiques propriétés, comportement,
    méthodes
  • Objets graphiques Tk widgets
  • Construction
  • Hiérarchisation
  • Options communes
  • Distribution dans la fenêtre
  • Association événements - actions
  • Quelques widgets en détail

36
Applications Graphiques Interactives
  • Programmation procédurale
  • Dirigée par le programmeur
  • Traitement séquentiel
  • Interface alpha-numérique
  • DOS
  • Programmation événementielle
  • Dirigée par l'utilisateur
  • Traitement événement - action
  • Interface graphique
  • Windows

37
Objets graphiques d'interface
  • Configuration
  • Propriétés
  • Attribut, caractéristique d'apparence
  • text
  • couleur
  • taille
  • ...
  • Comportement
  • Réponses aux événements (binding)
  • A quel événement quelle action
  • mouse move gt changer pointeur de la souris
  • click gt sauvegarder
  • double click gt ouvrir fenêtre
  • ...
  • Méthodes
  • Commandes prédéfinies de l'objet
  • configure
  • delete
  • move
  • ...

38
Objets graphiques Tk widgets
Boutons
Menus
menu
menubutton
Edition de texte
Barres de progression
label, entry, message, text
scale
Listes
Graphiques et images
canvas
listbox
  • D'autres
  • toplevel, frame, scrollbar
  • Chacun de ces noms de widget correspond à une
    commande qui sert à le créer

39
Construction d'un widget
  • Création
  • Widget nom arguments ?options?
  • button .hello -text "Hello tous" -command puts
    stdout "hello à tous"
  • nom du widget .hello (règles d'hiérarchisation)
  • -attribut value toujours par paire
  • chaque widget a des attributs spécifiques
  • un ensemble d'attributs sont communs à tous les
    widgets
  • Tk définit des valeurs par défaut pour tous les
    attributs
  • Géométrie packer ou placer ou grid
  • si le geometry manager n'a pas été invoqué, le
    widget n'apparaît pas à l'écran
  • pack .hello
  • pack .hello -side bottom -fill x -expand true
  • Action le widget créé est devenu une commande
    qui permet l'invocation des méthodes
  • .hello flash .hello invoke
  • .hello configure -background blue

40
Widgets - Hiérarchisation
.
.scroll
.menu
.listbox
.menu.file
.menu.help
41
Widgets - Attributs communes
  • Attributs de type général
  • -text string
  • -command tclCommand
  • -textvariable variable
  • -xscrollcommand .x.scroll set
  • -takefocus focusType
  • Géométrie
  • -anchor neesennwcenter
  • -justify leftcenterright
  • -relief flatgrooveraisedridgesunken
  • -width n -height m
  • -geometry n x m
  • -padx n -pady m
  • -orient horizontalvertical

42
Widgets - Attributs communes
  • Couleurs
  • -background color
  • -foreground color
  • -activebackground color
  • -activeforeground color
  • -highlightcolor color
  • -selectbackground color
  • -selectforeground color
  • -disableforeground color
  • Police, images...
  • -font font
  • -bitmap bitmap
  • -cursor cursor
  • -image image
  • cette image doit avoir été créée avec la commande
  • image create type ?name? ?options value ...?

43
Widgets - Attributs communes
  • Contrôle
  • -jump truefalse (pour scrollbar)
  • -setgrid truefalse (pour text ou canvas)
  • -exportselection truefalse
  • -state normaldisabledactive
  • Rappel pour connaître les options d'un widget
    donné
  • .hello configure
  • ou plus joliment
  • proc myConfigure w
  • foreach i w configure
  • set option lindex i 0
  • set value lindex i end
  • puts "option value"
  • myConfigure .hello

-anchor center -background blue -bd
borderWidth -bg background -borderwidth
2 -command puts stdout "hello à tous" -fg
foreground -font MS Sans Serif 8 ...
gt
44
Géometrie distribution dans la fenêtre
  • Geometry managers contrôlent les positions and
    tailles des widgets
  • Aussi longtemps que le geometry manager n'a pas
    été invoqué, le widget n'apparaît pas à l'écran
  • Geometry manager algorithme pour fixer la
    position des widgets par rapport à la fenêtre mère

Paramètres de dessin de l'application
Taille demandée pour le widget
Géométrie de la fenêtre mère
Geometry Manager placer packer grid
Taille et position du widget
Taille de la fenêtre mère
45
Le placer
  • Commande place
  • place widgetName option ?options?
  • Déclaration précise de la position du widget
  • Absolue (options -x -y)
  • Relative basée sur la taille de la fenêtre
    (options -relx -rely)
  • Chaque widget est placé indépendamment

button .x -text X place .x -x 0 -y 0
place .x -x 1.0c -rely 0.5 -anchor w
46
Le packer
  • Commande pack
  • pack widgetName ?options?
  • Déclaration des positions relatives des widgets,
    selon une direction donnée
  • de gauche à droite (option -side left/right)
  • de haut en bas (option -side top/bottom)
  • Pour chaque widget

1. Déterminer le côté -side left/right/top/bottom

3. Ajuster la taille du widget afin de remplir
l'espace -fill none/x/y/both -expand true/false
2.Réserver l'espace -padx n -pady m -ipadx n
-ipady m
4. Affciher le widget
47
Le packer Exemples
button .ok -text OKbutton .cancel -text
"Cancel"button .help -text Helppack .ok .cancel
.help -side left
pack .ok .cancel .help -side top
pack .ok .cancel .help -side left \-padx 2m
-pady 1m
pack .ok .cancel -side leftpack .help -side left
-expand true
pack .ok .cancel -side leftpack .help -side left
\ -expand true -fill x
48
Le packer hiérarchie
  • On peut utiliser des objets "frame" pour créer
    des groupements plus complexes

frame .leftpack .left -side left -padx 3m -pady
3mframe .rightpack .right -side right -padx 3m
-pady 3mforeach size 8 10 12 18 24
radiobutton .ptssize -variable pts \
-value size -text "size points"pack .pts8
.pts10 .pts12 .pts18 .pts24 \ -in .left -side
top -anchor wcheckbutton .bold -text Bold \
-variable boldcheckbutton .italic -text Italic
\ -variable italiccheckbutton .underline
-text Underline \ -variable underlinepack
.bold .italic .underline \ -in .right -side
top -anchor w
49
Le grid
  • Commande grid
  • grid widgetName ?widgetNames? option
  • Arrange les widgets sur une grille
  • Lignes et colonnes de dimensions variables
  • Pour chaque widget, les lignes et colonnes
    occupées sont spécifiées
  • Idéal frames avec leur propre grid
  • foreach color red green lightblue black purple
    white
  • label .lcolor -text color
  • frame .fcolor -background color -width 100
    -height 2
  • grid .lcolor .fcolor
  • chaque commande grid commence une nouvelle ligne
  • l'ordre des widgets d'une ligne détermine leur
    colonne
  • la taille d'une colonne est par défaut celle de
    l'élément le plus large

50
Binding Association événements-actions
  • Commande bind associe des scripts Tcl avec des
    événements générés par l'utilisateur
  • bind .b ltControl-hgt backspace .t
  • On peut utiliser des tags pour associer plusieurs
    widgets à un même événement
  • un seul widget .b
  • une classe Text
  • tous all

widget/tag
événement
script
51
Bindings - Syntaxe des événements
  • lt Double-Control - ButtonPress - 1 gt

Bouton ou touche
Type d'événement
  • Modificateurs
  • Evénements
  • Bouton / Touche
  • Control / Shift / Lock / Alt
  • Button1 (B1) / B2 / ...
  • Double / Triple
  • ...
  • ButtonPress/ ButtonRelease
  • KeyPress / KeyRelease
  • Enter / Leave
  • Activate / Deactivate
  • Motion
  • ...
  • Bouton 1-5
  • Caractères ASCII
  • Caractères non-alphanumériques
  • Touches non-ascii (F1)

ltB1-Motiongt a ltShift_Lgt
ltKeyRelease-Shift_Lgt ltControl-Alt-Deletegt ltDouble-
ButtonPress-1gt
52
Bindings - Valeurs de retour
  • La commande bind peut retourner quelques valeurs
    associées à l'événement ()
  • Les coordonnées de la souris x et y.
  • Le widget W.
  • Le caractère qui a généré l'événement A.
  • ...
  • Exemples
  • bind .c ltB1-Motiongt move x y
  • bind .t ltKeyPressgt puts A
  • bind all ltEntergt help W

53
Frame et Label
  • frame Pour arranger des widgets
  • -background color
  • -height / -width
  • ...
  • Rappel pour mettre 4 widgets en carré dans une
    fenêtre (à l'aide du packer) il faut
    nécessairement 2 frames
  • Label pour afficher un label dans un widget
  • -text si constant
  • -textvariable si variable
  • set comment Un commentaire
  • label .l -textvariable comment
  • pack .l
  • set comment "Ceci est un commentaire"

54
Boutons
  • button un simple bouton qui exécutera une
    commande Tcl
  • -text
  • -command
  • checkbutton bouton logique lié à une variable
  • -variable
  • -offvalue
  • -onvalue

checkbutton .chb -text Oui ou Non -variable x
-offvalue non -onvalue oui pack .chb set x
non set x oui .chb configure -command puts x
55
Boutons
  • radiobutton bouton parmi un ensemble pour
    choisir la valeur d'une variable
  • -variable
  • -value

foreach machine castor nestor sunline hpline
sgline radiobutton .rmachine -text
machine -variable mach -value machine pack
.rmachine set mach hpline
  • menubutton bouton qui propose un menu (créé par
    la commande menu)
  • -menu menuWidgetName

menubutton .m -text "Example de menu" -menu
.mex pack .m menu .mex (voir plus loin)
56
Menu
  • menu crée un menu auquel on ajoutera des
    options
  • -postcommand tclCommand
  • -tearoff truefalse
  • Méthodes
  • .menu add cascadecheckbuttoncommandradiobutton
    separator ?option value ?
  • cette commande ajoute une entrée au menu les
    indices commencent à 0 mais les tearoff et
    séparateurs on des indices
  • -label string
  • -menu menuWidgetName
  • .menu delete index
  • .menu index end
  • retourne l'indice de la dernière entrée
  • .menu postcascade index
  • poste un sous-menu à l'indice index
  • .menu entryconfigure index ?option value?
  • retourne ou modifie l'entrée index

57
Menu
  • menubutton .mb -text Ceci est un menu déroulant
    -menu .mb.menu
  • set m menu .mb.menu -tearoff 1
  • m add command -label Time -command puts clock
    format clock seconds
  • m add checkbutton -label Boolean -variable x
    -command puts "xx"
  • m add separator
  • m add cascade -label Machine -menu m.sub
  • set msub menu m.sub -tearoff 0
  • foreach machine castor nestor sunline hpline
    sgline
  • msub add radiobutton -label machine
    -variable mach -value machine
  • pack .mb
  • m add command -label Quelle machine -command
    puts mach

Wed Dec 08 102537 Heure d'été Paris Madrid 1999
x1
hpline
58
Textes
  • label
  • pas d'action particulière
  • message
  • -aspect integer
  • 100largeur / hauteur (défaut 150)
  • entry
  • -show any_character
  • si any_character vaut on verra des étoiles au
    lieu de la valeur
  • -textvariable varName
  • Méthodes
  • .entry get
  • .entry delete

59
Textes
  • text
  • -wrap nonecharword
  • -state normaldisabled
  • Très puissant pour faire du traitement de texte
  • text .myText -wrap word -state disabled
  • l'utilisateur ne peut pas écrire
  • pack .myText
  • Supposons qu'on veuille effacer un texte et le
    remplacer par un autre
  • .myText configure -state normal
  • .myText delete 1.0 end
  • le début du texte est un la ligne 1, caractère 0
    end est la fin du text
  • .myText insert end
  • .myText configure -state disabled
  • on remet le texte en lecture seule

60
Scrollbar et scale
  • scrollbar barres de déplacement
    verticauxhorizontaux pour contrôler l'affichage
    de entrylistboxtextcanvas il faut associer
    les widgets entre eux
  • frame .f
  • pack .f
  • scrollbar .f.scroll -command .f.text yview \
  • -orient vertical
  • text .f.text -yscrollcommand .f.scroll set
  • pack .f.scroll -side right -fill y -expand true
  • pack .f.text -side left -fill both -expand true
  • .f.text insert end type "tree.tcl"
  • toujours packer la scrollbar avant l'autre widget
  • pour qu'elle reste visible
  • scale échelle avec affichage de valeur
    modifiable interactivement

scale .scale -variable x -resolution 5 -to
1000 pack .scale .scale set 36 .scale get
61
Listbox
  • listbox liste de choix avec des actions
    possibles
  • -selectmode signlebrowsemultipleextended
  • les indices peuvent prendre les valeurs
  • nactiveanchorend_at_x,y
  • Méthodes
  • .myList insert index ?element1 ?
  • insérer un (des) élément(s) à la position index
  • .myList get index ?index2?
  • sélectionner l'élément à index (ou de index à
    index2)
  • .myList delete index ?index2?
  • effacer l'élément à index (ou de index à
    index2)

frame .frame pack .frame scrollbar .frame.scroll
-command ".frame.list yview" listbox .frame.list
-yscroll ".frame.scroll set" -setgrid 1 -height
12 pack .frame.scroll -side right -fill y pack
.frame.list -side left -expand 1 -fill
both foreach fichier glob .tcl .frame.list
insert end fichier
62
Toplevel
  • toplevel crée une nouvelle fenêtre au niveau du
    manager
  • utile pour les boîtes de dialogues ou les
    messages
  • label .labelConsole -text "Hello"
  • pack .labelConsole -relief sunken -expand yes
    -fill both
  • toplevel .new
  • wm title .new "Fenêtre de contrôle"
  • label .new.labelTopLevel -text "tout le monde
    !!!"
  • pack .new.labelTopLevel -side right

63
Canvas
  • canvas permet de regrouper et de visualiser
    plusieurs items à la fois texte, graphiques et
    images
  • Méthodes
  • .canvas create type x y ?x y ...? ?option value?
  • Types d'items dans un canvas arc, bitmap,
    image, line, oval, polygon, rectangle, text,
    window
  • une option très utile est -tag tagList qui permet
    de regrouper les difféerents éléments d'un canvas
    et de les manipuler par groupe (tagOrId)
  • les autres options dépendent du type et sont bien
    documentées
  • .canvas delete ?tagOrId
  • Binding interne (pour chaque item)
  • Associer des tags aux items pour les regrouper
  • .monCanvas create rect 1c 1c 2c 2c tags foo
  • .t tag add foo 1.0 2.0
  • Associer les bindings aux tags
  • .t bind foo lt1gt
  • .c bind foo ltEntergt

64
Canvas -Exemple
  • canvas .c -width 400 -height 200
  • pack .c
  • .c create text 70 50 -text "Photo" -tag movable
  • .c create bitmap 200 50 -bitmap _at_face.bmp -tag
    movable
  • .c bind movable ltButton-1gt Mark x y W
  • .c bind movable ltB1-Motiongt Drag x y W
  • proc Mark x y w
  • global state
  • set state(w,obj) w find closest x y
  • set state(w,x) x set state(w,y) y
  • proc Drag x y w
  • global state
  • set dx expr x -state(w,x) set dy expr y
    -state(w,y)
  • w move state(w,obj) dx dy
  • set state(w,x) x set state(w,y) y
  • .c configure -background green

65
Quelques conseils
  • Pour avoir des renseignements
  • winfo children widgetName
  • pack info widgetName
  • bind widgetName ?lteventgt?
  • bind class ?lteventgt?
  • Pour effacer
  • pack forget widgetName
  • supprime un widget et tous ses descendant de la
    géométrie ce qui fait qu'on peut le déplacer
    ailleurs
  • destroy widgetName
  • supprime un widget et tous ses descendants
  • Frames intermédiaires pour avoir une structure
    propre
  • Le dernier widget mis dans la géométrie est à
    l'avant

66
Troisième partie Tcl/Tk C/C
67
Tcl/Tk C/C
  • Extension du langage
  • Pour quoi étendre Tcl/Tk?
  • De C au Tcl SWIG
  • Création du fichier "interface"
  • Construction du fichier "pont"
  • Génération de la librairie dynamique
  • Appel à des fonctions depuis Tcl/Tk quelques
    retouches
  • Exemple Tcl/Tk Libido

68
Pour quoi étendre Tcl/Tk?
  • Utiliser code compilé pour exécuter des
    algorithmes qui sont trop coûteux (en temps) pour
    un langage interprété
  • Manipuler des dispositifs ou des formats de
    données qui ne sont pas actuellement supportés
    par Tcl
  • Développer rapidement une interface graphique
    pour une librairie C
  • Prototypage
  • Validation
  • Ajouter d'autres objets graphiques à Tk
  • Cacher les détails d'implémentation et ne
    distribuer que le code objet (compilé)
  • ...

69
Tcl/Tk - C/C
C/C
Tcl/Tk
  • Appel à des programmes exécutables
  • Implementation de commandes tcl en C

Créer une librairie dynamique et l'incorporer au
shell (load)
Créer un nouveau shell avec les nouvelles
commandes
open
exec
70
De C au Tcl ?
C/C
Tcl/Tk
  • Initialiser les structures de données persistants

Initialisation .c
Code source .h .c
Librairie dynamique .dll / .so
  • Enregistrer les nouvelles commandes dans
    l'interpréteur Tcl

Enregistrement .c
Code C - Tcl library
71
De C au Tcl ?SWIG
C/C
Tcl/Tk
Simplified Wrapper and Interface Generator
http//www.swig.org
Fichier "interface" .i
SWIG
parsing génération de code
Fichier "pont" .c
Librairie dynamique .dll / .so
Code source .h / .c
72
Alors ...
  • Programmation "propre" des fonctions C
  • Création du fichier "interface" avec les
    fonctions à exporter (qui deviendront commandes
    Tcl)
  • Construction du fichier "pont" avec SWIG
  • Génération de la librairie dynamique
  • Appel à des fonctions depuis Tcl/Tk

73
Création du fichier "interface"
  • La fonctionnalité du module Tcl est définie par
    les prototypes des fonctions C à exporter
  • Il s'agit simplement de
  • donner un nom au module
  • lister les fichiers d'entêtes (.h)
  • définir les structures de données propres
    utilisées dans les paramètres des fonctions (s'il
    y en a)
  • lister les prototypes des fonctions à exporter

//exemple.i Un fichier interface
simple module exemple include
ltmath.hgt double puissance(double x, double y)
Nom du module d'extension
Code à copier dans le fichier pont Fichiers
d'entêtes
Prototypes C/C ANSI
74
Fichier "interface"- Exemple
module axe include ltmath.hgt include
ltidima.hgt include "fnaxe.h" include
"fnplan.h" include typemaps.i typedef
unsigned short PPIMAGE_USHORT typedef struct
double x double y double z
POINTAXE typedef POINTAXE PPOINTAXE apply
int OUTPUT int nomPoints PPOINTAXE
ExtraireAxe (int xDemar, int yDemar, int zDemar,
int nomPoints) // Make parameters 'x,y,z'
output parameters apply double OUTPUT double
x, double y, double z void CoordsPointAxe
(PPOINTAXE pointaxe, double x, double y, double
z) int SoustraireImages(PPIMAGE_USHORT imA,
PPIMAGE_USHORT imB)
75
Construction du fichier "pont"
  • Executer SWIG avec le fichier interface
  • SWIG génère automatiquement le fichier pont (.c
    ou .cxx)

exemple_wrap.c
exemple_wrap.cxx
76
Génération de la librairie dynamique
Visual C
  • Créer un nouveau projet (Dynamic-Link Library)
  • Fichiers d'entêtes (.h)
  • Fichiers sources (.c / .cxx)
  • Fichier pont (_wrap.c / _wrap.cxx)
  • Fichiers des librairies (.lib)
  • Tcl/Tk tcl80.lib
  • VTK vtkdll.lib
  • libido libmsvc.lib
  • Settings
  • C Preprocessor
  • "Additional include directories" répertoires
    Tcl/Tk, libido, VTK
  • Link Options
  • "Output file name" Nom du dll
  • "Build" (compile link) le projet

77
Appel à des fonctions depuis Tcl/Tk
  • Commande load
  • libido load idotcl
  • vtk load vtktcl
  • autres load "./dlls/axe.dll" axe
  • Casting de pointeurs

78
Casting de pointeurs - Fonctions utiles
  • IdCast
  • Changer le type d'un objet (libido)
  • Exemple

proc IdCast obj typ set t split obj "_"
return "_lindex t 1_typ"
set im IdAcrReadFile c/images/lena.acr
IMA_UCHAR
gt _f35c58_void_p set im IdCast im
PPIMAGE_UCHAR
gt _f35c58_PPIMAGE_UCHAR puts "Dimension X
IdImaDimX im" set ims IdImaSobel im NULL 1
gt
_f35a08_PPIMAGE_UCHAR
79
Casting de pointeurs - Fonctions utiles
  • adr2int
  • Convertir un pointeur Tcl en pointeur C
  • Adresse hexadécimale type -gt adresse entière
  • Pour passer des pointeurs à des fonctions C
  • proc adr2int adr
  • scan lindex split adr "_" 1 x a
  • return a
  • Exemple Tableau d'images en entrée
  • set tim ptrcreate "int" "" 2
  • set tim ptrcast tim PPIMAGE_UCHAR_p
  • ptrset tim adr2int im 0 "int"
  • ptrset tim adr2int ims 1 "int"
  • set imagette IdImaCreImagette tim 2 256 256
  • affim imagette 1 imagette

80
Casting de pointeurs - Fonctions utiles
  • int2adr
  • Convertir un pointeur C en pointeur Tcl
  • Adresse entière -gt adresse hexadécimale type
  • Pour récupérer un pointeur C
  • proc int2adr val typ
  • return format _x_typ val
  • Exemple Tableau d'images en sortie
  • set vol IdAcrReadFile c/images/sphere.acr
    VOL_UCHAR
  • set vol IdCast vol PPPVOLUME_UCHAR
  • set timv IdVolVolumeToTabImaXY vol
  • puts int_get IdCast timv int_p 64
  • set imv int2adr int_get IdCast timv int_p
    64
  • set imv IdCast imv PPIMAGE_UCHAR
  • affim imv 2 imv

81
Exemple d'une Application Graphique
InteractiveTcl/Tk Libido
Write a Comment
User Comments (0)
About PowerShow.com