LE MENU

Un menu donne du contenu à votre interface et permet d'organiser les tâches de votre application de façon plus homogène.

Voici différents tutoriels sur les menus tk :

Création d'un menu et sous-menu

Pour créer un menu voici la commande :

menu .m
. configure -menu .m

pour ajouter un sous menu :

menu .m.f
.m add cascade -menu .m.f -label "File"
.m.f add command -label "Exit" -command { exit }

Petite remarque :

Le menu est dit 'décrochable' c'est à dire qu'il y a un ligne en pointillé qui permet de le décrocher du menu.

Pour enlever cette ligne il suffit d'"écrire :

menu .m.f  -tearoff 0

-tearoff 0 empèchera ce décrochement

Menu PopUp

pour créer un popup menu  :

menu .m -tearoff 0
.m add command -label Beep
.m add command -label Exit -command {exit}

bind . "" "showMenu %X %Y"

wm title . popupmenu
wm geometry . 350x250+300+300

proc showMenu {x y} {
    tk_popup .m $x $y
} 

ajouter un checkbutton ou un radiobutton dans un sous menu


 

Aujourd'hui nous allons créer une barre de menu dans un fenêtre et luis ajouter un checkbutton et deux radibutton.

Créons d'abord le menu option comme ceci :

menu .menubar
. configure -menu .menubar

menu .menubar.options -tearoff 0
.menubar add cascade -label "Options" -menu .menubar.options

en bas mettons ce code :

# Checkbutton
.menubar.options add checkbutton -label "Afficher la grille" \
 -variable afficherGrille -command {puts "afficherGrille = $::afficherGrille"}
# Deux radiobuttons
.menubar.options add radiobutton -label "Mode texte" -variable mode \
 -value "texte" -command {puts "mode = $::mode"}

.menubar.options add radiobutton -label "Mode graphique" -variable mode \
 -value "graphique" -command {puts "mode = $::mode"}

 

Voici le code complet de notre exemple :

package require Tk

# Variables
set afficherGrille 0
set mode "texte"

menu .menubar
. configure -menu .menubar

menu .menubar.options -tearoff 0
.menubar add cascade -label "Options" -menu .menubar.options

# Checkbutton
.menubar.options add checkbutton -label "Afficher la grille" -variable afficherGrille -command {puts "afficherGrille = $::afficherGrille"}

.menubar.options add separator

# Deux radiobuttons
.menubar.options add radiobutton -label "Mode texte" -variable mode -value "texte" -command {puts "mode = $::mode"}

.menubar.options add radiobutton -label "Mode graphique" -variable mode -value "graphique" -command {puts "mode = $::mode"}

pack [label .l -text "Menu de démonstration"] -padx 20 -pady 20

 

Une remarque très intéressante :

voyez comment est notée la variable mode : 

$::mode

les deux point confirme que la variable mode appartient au namespace principal. Ainsi on peeut l'appeler durectement sans passer par la commande global.