42
Tcl / Tk Pour débutant … et autre Raymond Ripp

Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

Embed Size (px)

Citation preview

Page 1: Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

Tcl / Tk

Pour débutant … et autre

Raymond Ripp

Page 2: Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

Exemples

Page 30: Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

Exemples 2

Page 31: Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

Exemples 2 bis

Page 32: Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

Exemples 3 avec args

Page 33: Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

Exemples 3 avec args bis

Page 34: Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est
Page 36: Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

Utilisation des tableaux associatifs

Page 37: Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

Appel récursif

Page 38: Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est
Page 39: Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est
Page 40: Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est
Page 41: Tcl / Tk Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

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 Pour débutant … et autre Raymond Ripp. Tcl / Tk Langage de programmation –généraliste –interprété –facile –rapide –moderne Fenêtrage –tout est

à suivre …