1 / 42

Tcl / Tk

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é

Download Presentation

Tcl / Tk

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

  3. 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

  4. Fichier .tcl exécutable Par tclsh (ou wish) Une instruction par ligne ou séparées par ; ou sur plusieurs li\ gnes Un premier exemple

  5. 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]

  6. 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)

  7. 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 ...

  8. 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

  9. 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} • switchstring{ pattern1{bloc} pattern2{bloc2} ... } • continue, break, return, exit

  10. 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 X 3.14 (Tcl sait que X est aussi un nombre) Tout est chaîne. Les fonctions associées ...

  11. 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.

  12. 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}

  13. Arrays • setM(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

  14. Arrays (suite) • … vraiment, vraiment pratique !!! • rapide, facile, sûr, … • c’est magique : en particulier pour l’adressage associatif … “adressage par le contenu”

  15. L’adressage associatif foreach Ligne [DuFichier “/home/ripp/labo”]{ scan $Ligne “%s %s %s” S N P set MmeMllM($N) $S set PrenomDe($N) $P lappend 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

  16. L’adressage associatif (suite) proc Badge X { global Memo if {[info exists Memo($X)]} { return $Memo($X) } if {[info exists Memo(Bidon)]} { return “” } foreach Ligne [DuFichier“/usr/badge”] { scan $Ligne “%s %s” N B set Memo($N) $B set Memo($B) $N } set Memo(Bidon) Nodin return [Badge $X] }

  17. 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 ?

  18. regexp • pour savoir si une sous-chaîne est dans une chaîne if {[regexp PetitGrand]} { bloc } Grandest une chaîne de caractères Petit une expression régulière qui définit très précisément ce qu’on recherche ...

  19. regexp PetitGrand • la chaîne Grandest 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.

  20. 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

  21. 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.

  22. 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 :

  23. Les éléments de base • frames : ce sont des cadres, des conteneurs toplevel frame • affichage et manipulation de textes text listbox message entry label • boutons et ascenseurs button scrollbar checkbutton radiob. • dessins et photos canvas image photo bitmap • menus menu menubutton

  24. Création toplevel .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

  25. 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]

  26. 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.

  27. 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 createrectangle 10 10 200 300 -fill red ...

  28. Organisation géométrique • pack$w.buttons -side bottom -fill x positionne la boite à côté ou au dessus des autres • place -x 10 -y 20 $w.truc la 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

  29. Exemples

  30. Exemples 2

  31. Exemples 2 bis

  32. Exemples 3 avec args

  33. Exemples 3 avec args bis

  34. 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, …

  35. Utilisation des tableaux associatifs

  36. Appel récursif

  37. 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

  38. à suivre …

More Related