Style de page


phpMyVisites | Open source web analytics phpMyVisites

Cette page n'a pas pour but de détailler toutes les options disponibles pour chaque widget (objet graphique) de tk, mais simplement de présenter quelques exemples simple d'utilisation.

Le widget button


but Création d'un boutton:

button .b -text "Quitter" -command "exit"
pack .b


Le widget label

label Le widget label permet d'afficher du texte.

label .lb1 -text "Bonjour"
label .lb2 -textvariable nom
pack .lb1 .lb2 -side left
set nom yves

Le widget entry


Le widget entry est un widget d'entrée de texte simple.
Exemple:
pack [entry .ent -textvariable ma_var]
	
L'option -textvariable permet de récupérer dans une variable le texte saisi dans ce widget.

Autre exemple d'utilisation: une calculatrice.

Les menus


menu Un exemple de menu:
  
 menu .menu
 menu .menu.fichier -tearoff 0
 
 .menu add cascade -label "Fichier" -menu .menu.fichier
 # Quitter le script:
 .menu.fichier add command -label "Quit" -accelerator "Control-q" -command {exit}  

 menu .menu.cascade -tearoff 0
 .menu add cascade -label "Cascade" -menu .menu.cascade
 # Menu en cascade:
 menu .menu.cascade.titre -tearoff 0
 .menu.cascade add cascade -label "Titre" -menu .menu.cascade.titre
 # menu qui change le titre de la fenêtre:
 .menu.cascade.titre add command -label "menu demo" -command {wm title . "menu demo"} 
 .menu.cascade.titre add command -label "test" -command {wm title . "test"}

 menu .menu.cascade.color 
 .menu.cascade add cascade -label "Couleur" -menu .menu.cascade.color
 # Menu pour changer la couleur de widget et menu:
 .menu.cascade.color add command -label "bleu" -command {tk_setPalette blue}
 .menu.cascade.color add command -label "rouge" -command {tk_setPalette red}
 
 . configure -menu .menu

  
Quelques options:
-tearoff 0 Cette option est un booléen qui indique si le menu doit être détachable. Par défaut cette option vaut 1, pour qu'un menu ne soit pas détachable il faut rajouter l'option -tearoff 0.
Dans l'exemple ci-dessus, j'ai laissé la valeur par défaut pour le menu couleur, on peut voir sur l'image (ci-dessus à droite) une ligne en pointillés au début du menu. Si on clique sur cette ligne, cela ouvre une petite fenêtre contenant les entrées du menu:

tearoff
-accelerator valeur
Cette option permet d'afficher une chaîne à droite du menu. En général on s'en sert pour indiquer une combinaison de touches (raccourci clavier) qui permet d'activer la même fonction que l'entrée du menu.
-bitmap valeur
Permet d'afficher une image à la place du titre du menu.

Les menubuttons

Ce sont des menus attachés à des boutons.
exemple:menubt
menubutton .mb1 -text "Fichier" -menu .mb1.m -relief raised
menubutton .mb2 -text "Cascade" -menu .mb2.m -relief raised

menu .mb1.m -tearoff 0
.mb1.m add command -label "Quitter" -command exit

menu .mb2.m -tearoff 0

menu .mb2.m.titre -tearoff 0
.mb2.m add cascade -label "Titre" -menu .mb2.m.titre
.mb2.m.titre add command -label "Menu boutton" -command {wm title . "Menu Boutton"}
.mb2.m.titre add command -label "test" -command {wm title . "test"}

menu .mb2.m.color 
.mb2.m add cascade -label "Couleur" -menu .mb2.m.color
.mb2.m.color add command -label "rouge" -command {tk_setPalette red}
.mb2.m.color add command -label "bleu" -command {tk_setPalette blue}

pack .mb1 .mb2 -side left -padx 4 -pady 4
On crée d'abord les menubouton, puis on crée des menus à l'intérieur de ceux ci.

Les canvas

Un canvas est une zone dans laquelle on peut dessiner des lignes, rectangles , cercles, arcs, courbes ou encore afficher des images.
canva
Exemple:
canvas .canv -width 100 -height 100
pack .canv

.canv create rectangle 2 2 99 99 -fill white -outline blue

.canv create line 10 30 30 80 -fill red -width 2
.canv create oval 30 10 60 30 -fill yellow -outline cyan
.canv create polygon 40 40 55 50 70 40 60 55 70 70 55 60 40 70 50 55 -fill green 
Pour voir d'autres exemples avec des canvas cliquez ici.

photo

Le widget photo

Ce widget permet d'afficher des images dans un label ou un canva.
Exemple:
# Selection d'un fichier image:
set types {
  {{gif}     {.gif}  }
  {{jpeg}     {.jpg}  }
 }
set fichier [tk_getOpenFile -filetypes $types -parent .]
image create photo img1 -file $fichier
label .la -image img1

pack .la

CheckButton

chkbutton Ce sont des cases à cocher.
Exemple:
set val 1
checkbutton .chk1 -textvariable val -variable val
grid .chk1
 

Radio button

radio Un radiobutton ressemble un peu a un checkbutton, à la différence près que l'on peut associer plusieurs radiobutton à une même variable et définir pour chacun d'entre eux la valeur qui sera affecté à la variable lorsque celui-ci sera coché.
Exemple:
set myvar 1
radiobutton .r1 -text "1" -state normal -variable myvar -value "1"
radiobutton .r2 -text "2" -variable myvar -value "2"
radiobutton .r3 -text "3" -state normal -variable myvar -value "3"
grid .r1
grid .r2
grid .r3

label .la -text "Choix:"
label .laff -textvariable myvar
grid  .la .laff 
	 

Les frames

Une frame est une zone qui peut contenir plusieurs widget, elle sert à organiser le placement de ces widgets. frame
Exemple:
frame .f1
button .f1.b1 -text "Quitter" -command exit
button .f1.b2 -text "bouton 2" 
button .f1.b3 -text "bouton 3"

pack .f1.b1 .f1.b2 .f1.b3 -side left -padx 4
label .lab -width 30 -fg red -bg white -text " Ceci est un label rouge sur fond blanc "
pack .f1 .lab -pady 2


On peut aussi s'en servir pour créer une barre d'outils que l'on affiche (pack) ou masque (pack forget) suivant le besoin.
Exemple:toolbar
# Barre d'outils
frame .toolbar
button .toolbar.b1 -text "bouton 1" -command {.txt insert end "1 \n"}
button .toolbar.b2 -text "bouton 2" -command {.txt insert end "2 \n"}
button .toolbar.b3 -text "bouton 3" -command {.txt insert end "3 \n"}

pack .toolbar.b1 .toolbar.b2 .toolbar.b3 -side left -padx 4
text .txt -width 30 -height 10 
pack .toolbar .txt -pady 2

set aff 1
. configure -menu .menu
menu .menu
menu .menu.aff -tearoff 0
.menu add cascade -label "Affichage" -menu .menu.aff
.menu.aff add check -label "toolbar"  -command {afftoolbar}  -variable aff

# Affiche ou cache la barre d'outils
proc afftoolbar {} {
  global aff
  if {$aff} {
    pack .toolbar.b1 .toolbar.b2 .toolbar.b3 -side left -padx 4
  } else  {
    pack forget .toolbar.b1 .toolbar.b2 .toolbar.b3; .toolbar configure -height 1
  }
}

Le widget labelframe

C'est une frame avec un titre:
 grid [labelframe .frame1 -text "Frame 1"]
	

listbox

Les listbox

Permettent d'afficher des listes.
Exemple:
 listbox .listb
 set select ""
 label .lab -textvariable select
 pack .listb .lab
 
 # Insertion des éléments:
 .listb insert end "gray" "blue" "red" "yellow" "green" \
 		"cyan" "seashell2" "ivory" "skyblue" "gold"
		
# évênement	lors d'un double click dans la liste:
 bind .listb  <Double-1> {set select [selection get]; .listb configure -bg $select}
	
Explications:

selection get retourne l'élément sélectionné.
.listb configure -bg $select change la couleur de fond du listbox.

Les Boites de dialogues

Tk propose différentes boîtes de dialogue:
Un exemple avec tk_messageBox:
	
tk_messageBox -icon warning -type ok -message "Ce programme ne sert strictement à rien" -title "Avertissement"

switch [tk_messageBox -icon question -type yesno -message "Quitter" -title "MessageBox"] {
  yes exit
  no { tk_messageBox -icon info -type ok -message "On continu !" -title "MessageBox" }
}

set i 1

while {[tk_messageBox -icon error -type retrycancel -message "Erreur $i" -title "OUPS !"]=="retry"} {incr i}

exit
	
Les principales options sont: tk_getOpenFile:
Exemple:
set types {
    {{fichiers tcl}     {.tcl}            }
    {{fichiers textes}     {.txt}            }
    {{All Files}        *             }
  }  
  set fichier [tk_getOpenFile -title "Sélectionnez le fichier a ouvrir" -initialdir "./" -filetypes $types]
tk_getOpenFile retourne le chemin du fichier sélectionné.
types est un tableau associatif qui contient les extensions des fichiers à afficher dans la boîte de dialogue.


tk_getSaveFile:
Boite d'enregistrement de fichier.
Exemple:
set types {
    {{fichiers tcl}     {.tcl}            }   
    {{All Files}        *             }
  }  
  set fichier [tk_getSaveFile -title "Enregistrer sous:" -initialdir "./" -filetypes $types]


tk_getChooseDirectory:
Exemple:
set dir [tk_chooseDirectory -title "choisissez un répertoire" -initialdir "./"]

tk_chooseColor
Choix d'une couleur.
Exemple:
set c grey
button .coul -text "Couleur" -bg $c -command {
  set c [tk_chooseColor -initialcolor $c ]
  .coul configure -bg $c
}

grid .coul
L'appui sur le bouton .coul ouvre une fenêtre de sélection de couleur, puis change la couleur de fond du bouton en celle qui à été choisie.
L'option -initialcolor définie la couleur sélectionné par défaut, lors de l'ouverture de la fenêtre de sélection.

paned

Paned windows

Ce widget permet de séparer une fenêtre (ou frame, ou un toplevel) en deux zones ajustables.
Exemple:
wm geometry . 200x100

panedwindow .pane -orient horizontal 
pack .pane -side top -expand yes -fill both

label .pane.left  -text "Coté gauche"  -bg yellow
label .pane.right -text "Coté droit" -bg white

.pane add .pane.left .pane.right

	
L'option -orient (horizontal ou vertical) permet de définir le sens (horizontal ou vertical) de séparation de la fenêtre.

Les toplevel

Ce widget permet d'ouvrir une nouvelle fenêtre. exemple:
	toplevel .t1
	wm title .t1 "nouvelle fenêtre"