tcl / tk
DESCRIPTION
Tcl / Tk. Pour débutant … et autre Raymond Ripp. Langage de programmation généraliste interprété facile rapide moderne. Fenêtrage tout est possible facile performant robuste. Tcl / Tk. Multiplateforme … Unix, Windows, Mac … un seul programme. Tcl. Interprété - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/1.jpg)
Tcl / Tk
Pour débutant … et autre
Raymond Ripp
![Page 2: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/2.jpg)
Tcl / Tk
• Langage de programmation – généraliste
– interprété
– facile
– rapide
– moderne
• Fenêtrage– tout est possible
– facile
– performant
– robuste
Multiplateforme … Unix, Windows, Mac… un seul programme
![Page 3: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/3.jpg)
Tcl
• Interprété– pas de compilation– peut être un langage de commande– pas de déclaration
• Les points forts– chaînes de caractères– listes– adressage associatif
![Page 4: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/4.jpg)
Un premier exemple
• Fichier .tcl exécutable
• Par tclsh (ou wish)
• Une instruction par ligne – ou séparées par ;
– ou sur plusieurs li\
gnes
![Page 5: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/5.jpg)
Les variables • Identificateur d’une variable
– toto X11 prix_max PrixMax prixMax• Type d’une variable (non déclaré)
– String (vraie chaîne de caractères ou nombre)
– List (de String ou de List)
– Array
• Affectation– set toto 25– Par une procédure CalAff toto 89 $X11
• Accès à la valeur– $toto– [set toto]
![Page 6: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/6.jpg)
Les fonctions
proc Moyenne {A B} {
return [expr ($A+$B)/2]
}
set X 12 (X=12)
set M [Moyenne $X 26] (M=19)
set Y $X (Y=12)
set Y [set X] (Y=12)
proc Calculons {X Y aZ} {
upvar $aZ Z
set Z [expr $X+$Y]
}
Calculons $X 78 Oscar (Oscar = X+78)
![Page 7: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/7.jpg)
Les arguments• sont transmis par valeur
– Moyenne $X 26• si c’est une variable ou une constante
– Calculons $X 78 Oscar• la procédure reçoit la valeur de X, le nombre 78 et
la chaîne de caractères Oscar
• par upvar $aZ Z elle sait que aZ est l ’adresse d ’une variable, qui localement s ’appelle Z
• ne peuvent être modifiés que – s’il y a upvar ...
![Page 8: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/8.jpg)
Return d’une procédure• return (ne retourne rien) • return 1789 (retourne 1789)
• proc Sommons {A B} { return [expr $A+$B]}
– retourne la somme
• Que peut-on retourner :– une valeur (chaîne ou nombre)– une liste (de n ’importe quoi : valeur ou listes )– … mais pas de array
![Page 9: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/9.jpg)
Les instructions de contrôle
• if {expression} {blocV} else {blocF}• while {expression} {bloc}• for {init} {expression} {increm} {bloc}• foreach a $Liste {bloc}• foreach a $ListeA b $ListeB {bloc}• foreach {a b} $Liste {bloc}• switch string {
pattern1 {bloc}
pattern2 {bloc2}
...
}
• continue, break, return, exit
![Page 10: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/10.jpg)
Les chaînes de caractères• set J “Bonjour”• set Mme “Madame”• set S “Bonsoir $Mme”• append S “ Durand”• set Texte “$S,\nje vous écris …”• set Pi 3.14 (Tcl sait que Pi est aussi un
nombre)
Tout est chaîne.Les fonctions associées ...
![Page 11: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/11.jpg)
Fonctions de traitement des chaînes de caractères
• append S “, merci.”• set C [string index $Tout 3] • set S [string range $Tout 3 end]• set S [string toupper “Salut”]
(tolower,totitle)
• set S [string repeat “bravo” 20]• set i [string first o “non ou non” 3]• set i [string last o “non ou non” 3]• string trim $S “c” (trimleft trimright)• set A [string replace $S 2 5 “AB”]• set L [string length $S]• string compare string equal etc.
![Page 12: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/12.jpg)
Les listes• set L {a b c d e}• set L [list 3 $X $Y 35]• lappend L 56 <<<< pas de $• set T [lsort $L]• set Petit [lrange $Grand 4 end]• set Element [lindex $L 3]• set NouvListe [linsert $Liste 2 $X $Y]• set AB [concat $ListeA $ListeB]• set n [llength $Liste]• set Texte [join $Lignes “\n”]• set Lignes [split $Texte “\n”]• foreach Element $Liste { bloc }
![Page 13: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/13.jpg)
Arrays
• set M(2,4)45 … comme une matrice …
• set S [expr $M(2,4)+8]• set M($i,3) 56
• set Prenom(Ripp) “Raymond”• set Bureau(Raymond Ripp) 0086
Tableau(Chaine) <--> Valeur
![Page 14: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/14.jpg)
Arrays (suite)
• … vraiment, vraiment pratique !!!
• rapide, facile, sûr, …
• c’est magique : en particulier pour l’adressage associatif …
“adressage par le contenu”
![Page 15: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/15.jpg)
L’adressage associatif
foreach Ligne [DuFichier “/home/ripp/labo”] {scan $Ligne “%s %s %s” S N Pset MmeMllM($N) $Sset PrenomDe($N) $Plappend LesNomsDe($P) $N
}
set Nom [Question “Votre nom :”]puts “$MmeMllM($Nom) $PrenomDe($Nom) $Nom, …”
puts “Les personnes se prénommant Nicolas sont : ”puts [join $LesNomsDe(Nicolas) “\n”]
c’est surtout très rapide
![Page 16: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/16.jpg)
L’adressage associatif (suite)
proc Badge X {global Memoif {[info exists Memo($X)]} {
return $Memo($X)}if {[info exists Memo(Bidon)]} { return “” }
foreach Ligne [DuFichier “/usr/badge”] {scan $Ligne “%s %s” N Bset Memo($N) $Bset Memo($B) $N
}set Memo(Bidon) Nodinreturn [Badge $X]
}
![Page 17: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/17.jpg)
Expressions régulières
• un don du ciel
• très simples pour des problèmes simples
• simple pour le reste … quand on a compris !
• vous ne pourrez plus vous en passer !
• … on y va ?
![Page 18: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/18.jpg)
regexp
• pour savoir si une sous-chaîne est dans une chaîne
if {[regexp Petit Grand]} { bloc }
Grand est une chaîne de caractères
Petit une expression régulière qui définit très précisément ce qu’on recherche ...
![Page 19: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/19.jpg)
regexp Petit Grand
• la chaîne Grand est normale• Petit est une expression régulière
– une simple chaîne : regexp ymo Raymond – … regexp {^R[a-z]+$} Raymond
– là où ça se corse c ’est quand il faut mettre des [, des ], des $, des *, ou autres …
– exercice pour l ’obtention du prix Nobel en informatique: écrire l ’expression régulière d ’une expression régulière correcte.
![Page 20: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/20.jpg)
regexp : caractères backslashés
• \+*.,[]{}()- ont une signification spécifique. Les backslasher pour les utiliser tels quels :
regexp {a\*x\+b} $Formule• \n \t ... ont une signification standardisée
![Page 21: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/21.jpg)
Tk, l’interface graphique• se programme en Tcl
• les widgets (WIndows gaDGETS) : fenêtres, boutons, cadres, ascenseurs, … sont des objets– que l ’on crée– qui ont leur vie– qui communiquent
• un manager les organise, les rend visibles, actifs, il gère les interactions avec la souris, le clavier.
![Page 22: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/22.jpg)
Hiérachie des widgets
• Il y a des fenêtres dans des fenêtres, des boutons, des ascenseurs, etc.
Un widget est fait de widgets
• la notation arborescente ....choix.liste
.choix.boutons.accepte
.choix.boutons.abandonne
• … induit la hiérarchie
• Il n’y a plus qu’à construire :
![Page 23: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/23.jpg)
Les éléments de base
• frames : ce sont des cadres, des conteneurstoplevel frame
• affichage et manipulation de textestext listbox message entry label
• boutons et ascenseursbutton scrollbar checkbutton radiob.
• dessins et photoscanvas image photo bitmap
• menusmenu menubutton
![Page 24: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/24.jpg)
Créationtoplevel .t1
frame .t1.f
frame .t1.f.g
canvas .t1.f.g.c -width 1024
scrollbar .t1.f.hor -orient horizontal
TypeDeWidget NomduWidget -option valeur -option valeur …
set Chevalet .t1 ; … ; set Toile $Tout.f.g.c
toplevel $Chevalet
canvas $Toile -width $LargeurToile
listbox $Palette
![Page 25: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/25.jpg)
Configuration 1/3
.t1.f.g.c configure -height 768
$Chevalet configure -background white
NomduWidget configure -option valeur -option valeur …
et pour obtenir les valeurs :set LaConfig [.a.b.c configure] (pour tout)
set LeFond [.a.b.c configure -background]
![Page 26: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/26.jpg)
Configuration 2/3
STANDARD OPTIONS -activebackground, activeBackground, Foreground -background or -bg, background, Background -borderwidth or -bd, borderWidth, BorderWidth -cursor, cursor, Cursor -highlightbackground, highlightBackground, HighlightBackground -highlightcolor, highlightColor, HighlightColor -highlightthickness, highlightThickness, HighlightThickness -jump, jump, Jump -orient, orient, Orient -relief, relief, Relief -repeatdelay, repeatDelay, RepeatDelay -repeatinterval, repeatInterval, RepeatInterval -takefocus, takeFocus, TakeFocus -troughcolor, troughColor, Background
… et il y en a encore … et des spécifiques à chaque widget.
![Page 27: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/27.jpg)
Configuration 3/3
… vous avez remarqué que
un widget $w, une fois créé, EST une fonction tcl.
Cette fonction permet de modifier le widget :
$w configure -option valeur de l‘interroger :
[$w configure -option]
Elle sert, en fait, à plein d’autres choses :
$w create rectangle 10 10 200 300 -fill red
...
![Page 28: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/28.jpg)
Organisation géométrique
• pack $w.buttons -side bottom -fill xpositionne la boite à côté ou au dessus des autres
• place -x 10 -y 20 $w.trucla place à un endroit précis en x,y
• grid .w.scrover -row 0 -column 1
sur une grille
Seules ces commandes et toplevel
provoquent l’affichage
![Page 29: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/29.jpg)
Exemples
![Page 30: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/30.jpg)
Exemples 2
![Page 31: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/31.jpg)
Exemples 2 bis
![Page 32: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/32.jpg)
Exemples 3 avec args
![Page 33: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/33.jpg)
Exemples 3 avec args bis
![Page 34: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/34.jpg)
Lecture d’un fichier
• Il faut des règles concernant le contenu– ligne par ligne, 1 prénom (avec - ), 1 nom, etc.
– attention aux lignes vides
– caractère séparateur : un ou plusieurs, espace ou tabulation, …
![Page 35: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/35.jpg)
![Page 36: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/36.jpg)
Utilisation des tableaux associatifs
![Page 37: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/37.jpg)
Appel récursif
![Page 38: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/38.jpg)
![Page 39: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/39.jpg)
![Page 40: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/40.jpg)
![Page 41: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/41.jpg)
Tclsh ou Wish en Unix ou Windows
• Un fichier .tcl• Double-clic du fichier• Attention puts ne marche car il n’y a pas de
console • Lancer wish
– source fifi.tcl
• Utiliser Tk• source gscope_outils.tcl
http://www-bio3d-igbmc.u-strasbg.fr/~ripp
![Page 42: Tcl / Tk](https://reader034.vdocument.in/reader034/viewer/2022042718/568154bd550346895dc2c38d/html5/thumbnails/42.jpg)
à suivre …