Les menus surgissant sont une façon populaire de présenter à l’utilisateur des choix possibles sans pour autant encombrer l’interface lorsque l’utilisateur n’est pas en train de faire un choix.
Pour faire une sélection, l’utilisateur peut faire un cliquer-glisser du bouton vers le choix. Il peut aussi, cliquer le bouton de menu: le menu apparaît et reste à l’écran tant que l’utilisateur n’a pas fait un choix en cliquant sur l’un d’eux.
La version de Tkinter pour Unix (au moins) supporte les menus «amovibles». Si cette fonctionnalité est activée, une ligne en pointillé apparaît au-dessus des choix du menu. L’utilisateur peut cliquer sur cette ligne pour détacher le menu afin qu’il puisse être déplacé librement: une nouvelle fenêtre indépendante qui contient tous les choix du menu apparaît.
Reportez vous à Menubutton - Boutons de menu, pour voir comment créer un bouton de menu et connecter celui-ci à un menu. Mais attardons-nous avant sur le widget Menu qui sert à afficher la liste des choix possibles.
Les choix affichés sur un menu peuvent être:
Pour créer un widget Menu, vous devez avoir créé au préalable un bouton de menu Menubutton que nous écrirons mb (à moins que vous ne souhaitiez créer une barre de menu, voir Barre de menus):
Ce constructeur retourne le nouveau widget Menu. Ses options incluent:
Paramètres: |
|
---|
Les méthodes qui suivent sont communes à tous les widget Menu. Celles qui servent à créer des items de choix ont leur propre jeu d’options; voir Options des items de choix d’un menu (coption).
Ajoute un choix du genre indiqué, à la suite des choix existants. L’argument genre peut être 'cascade', 'checkbutton', 'command', 'radiobutton', ou 'separator'. En fonction du genre indiqué, cette méthode est équivalente à add_cascade(), add_checkbutton(), etc. Pour plus de détails, reportez-vous à ces méthodes (voir ci-dessous).
Ajoute un élément de type cascade à la liste des éléments de choix déjà présents dans ce menu. Servez-vous de l’option menu pour préciser l’objet Menu qui correspond au sous-menu.
Ajoute un choix à cocher à la liste des élements de choix déjà présents dans ce menu. Les options vous permettront de régler cet item à peu près de la même façon qu’on configure une case à cocher Checkbutton. Voir Options des items de choix d’un menu (coption).
Ajoute une choix de type commande aux choix existants. Utilisez les options label, bitmap, ou image pour placer du texte ou une image sur le menu; utiliser l’option command pour connecter cet élément à une fonction qui sera appelée lorsque cet élément est sélectionné.
Ajoute un bouton radio aux choix existants. Les options vous permettent de configurer un tel bouton à peu près de la même façon qu’un widget Radiobutton; voir Radiobutton - Boutons radio.
Ajoute un séparateur après le dernier choix courant du menu. Il s’agit juste d’une ligne horizontale qui peut servir à grouper des choix. Les séparateurs ont une position comme les autres choix, ainsi, si vous avez déjà trois choix et que vous ajoutez un séparateur, il occupera la position 3 (si on compte à partir de 0).
Cette méthode supprime les choix du menu situés entre la position index1 jusqu’à la position index2 inclue. Pour supprimer un seul choix, il suffit d’omettre le deuxième argument. Vous ne pouvez pas utiliser cette méthode pour détruire l’élément graphique de détachement du menu (tear-off), mais vous pouvez faire cela en mettant l’option tearoff du menu à 0.
Sert à récupérer la valeur courante d’une option du choix ayant la position index dans le menu. l’option est à fournir sous la forme d’une chaîne de caractères.
Pour modifier la valeur courante d’une ou de plusieurs options du choix ayant la position index dans le menu, appeler cette méthode avec l’index adéquat et un ou plusieurs arguments de la forme coption=valeur.
Retourne la position du choix indiqué via l’index i. Par exemple, vous pouvez utilisez index('end') pour savoir quel est le numéro d’index du dernier choix. Retourne None si aucun choix n’est trouvé.
Insère une cascade à la position index, en partant de 0. Chaque choix situé après cette position est décalé vers le bas d’une unité. Les options sont les mêmes que pour la méthode add_cascade(), ci-dessus.
Insère un choix à cocher à la position index. Les options sont les mêmes que pour la méthode add_checkbutton() ci-dessus.
Insère un choix de type commande à la position index. Les options sont les mêmes que pour la méthode add_command() ci-dessus.
Insère un choix de type bouton radio à la position index. Les options sont les mêmes que pour la méthode add_radiobutton() ci-dessus.
Insère un séparteur à la position index.
Appelle la fonction de rappel associé à l’élément de choix situé à la position index. Si c’est un choix à cocher, son état est basculé entre actif ou inactif. Si c’est un choix de type bouton radio, le bouton est activé.
Affiche le menu à la position (x, y) relativement à la fenêtre principale.
Retourne le type du choix de position index: 'cascade', 'checkbutton', 'command', 'radiobutton', 'separator', ou 'tearoff'.
Retourne le décalage vertical en pixel (relatif au haut du menu) de l’élément de choix numéro n. La raison d’être de cette méthode est de vous permettre de calculer précisément la position où placer un menu surgissant (popup) par rapport à la position courante de la souris.
À chaque fois qu’une méthode de menu décrite plus haut possède un argument coption, vous pouvez indiquer une valeur pour chaque nom d’option donné ci-dessous sous la forme coption=valeur. Par exemple, pour créer un choix de type commande dont le texte est rouge, utiliser foreground='red' comme argument de la méthode add_command.
Les options des élements de choix (coption) sont:
Pour créer une barre de menu principale, c’est à dire sous le bord supérieur de la fenêtre de l’application (Avec MacOS, il apparaîtra tout en haut de l’écran lorsque l’application a le focus), procéder comme cela:
Voici un simple exemple (root désigne la fenêtre principale). Ce code créera un barre de menu formée de d’un choix de premier niveau “Aide” (cascade) lequel donnera accès à un choix “À propos” (command) qui appelera la gestionnaire aproposGest:
menuBar = Menu(root)
root['menu'] = menuBar
sousMenu = Menu(menuBar)
menuBar.add_cascade(label='Aide', menu=sousMenu)
sousMenu.add_command(label='À propos', command=aproposGest)
Note: Vous devez utiliser la méthode add_cascade() pour ajouter les choix que vous souhaitez proposer dans la barre de menu principale. Les appels aux méthodes add_checkbutton(), add_command(), ou add_radiobutton() seront ignorés dans ce contexte.
On constate certaines variations de comportement selon la plateforme utilisée.