Tutoriel Tkinter - Menubar
Un des éléments les plus courants de l’interface graphique est la barre de menu. Une barre de menu se trouve normalement sous la barre de titre pour afficher la série de menus. Après avoir cliqué sur l’un des menus de niveau supérieur, un sous-menu sera étendu pour afficher des éléments de menu plus pertinents. Un sous-menu est normalement lié à une commande spécifique comme open
, close
, save
ou quit
.
Barre de menus de base de Tkinter
Nous allons créer notre premier exemple de barre de menus qui a un menu File
comme dans la plupart des éditeurs. Nous n’incluons que les sous-menus Open
, Save
et Exit
pour plus de simplicité.
import tkinter as tk
app = tk.Tk()
app.geometry("300x200")
app.title("Basic Menu Bar")
menubar = tk.Menu(app)
filemenu = tk.Menu(menubar)
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_command(label="Exit")
menubar.add_cascade(label="File", menu=filemenu)
app.config(menu=menubar)
app.mainloop()
menubar = tk.Menu(app)
Le paramètre donné du Menu
est le widget parent du menu créé. La ligne de code ci-dessus signifie que le widget de menu menubar
sera le niveau supérieur du cadre app
.
filemenu = tk.Menu(menubar)
De même, filemenu
est le menu du widget menubar
, ou le sous-menu du frame app
.
filemenu.add_command(label="Open")
La commande add_command
ajoute les commandes au menu filemenu
. label
est le texte affiché dans le sous-menu.
menubar.add_cascade(label="File", menu=filemenu)
Le filemenu
est ajouté à menubar
avec la commande add_cascade
. Fichier File
est l’étiquette de menu affichée dans le niveau supérieur du cadre app
.
app.config(menu=menubar)
Bien que menubar
soit créé pour être un widget enfant de app
comme nous l’avons expliqué ci-dessus, vous devez toujours le configurer pour qu’il soit le menu
de app
. Sinon, aucune barre de menu ne sera affichée dans l’interface graphique.
Elle ne répond pas du tout si vous cliquez sur les options comme Open
ou Save
dans le sous-menu de File
parce qu’il n’y a pas encore de commande attachée à celles-ci. Nous rendrons cette commande fonctionnelle lors de la prochaine session.
Commande Tkinter Menubar
import tkinter as tk
from tkinter import filedialog
def onOpen():
print(
filedialog.askopenfilename(
initialdir="/",
title="Open file",
filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
)
)
def onSave():
print(
filedialog.asksaveasfilename(
initialdir="/",
title="Save as",
filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
)
)
app = tk.Tk()
app.geometry("300x200")
app.title("Menu Bar Command")
menubar = tk.Menu(app)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="Open", command=onOpen)
filemenu.add_command(label="Save", command=onSave)
filemenu.add_command(label="Exit", command=app.quit)
menubar.add_cascade(label="File", menu=filemenu)
app.config(menu=menubar)
app.mainloop()
filemenu = tk.Menu(menubar, tearoff=0)
Par défaut, tearoff
est réglé sur 1
et il détacherait les menus de la fenêtre principale pour créer un menu flottant si les lignes pointillées en haut sont cliquées. Ici, il est réglé à 0
pour désactiver cette fonctionnalité flottante.
filemenu.add_command(label="Open", command=onOpen)
La fonction onOpen
est liée au menu Open
, et sera appelée quand Open
est cliqué.
def onOpen():
print(
filedialog.askopenfilename(
initialdir="/",
title="Open file",
filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
)
)
Cette fonction affiche le dialogue ouvert et retourne le nom du fichier sélectionné. Dans notre exemple, nous n’ouvrons pas vraiment le fichier mais nous imprimons son nom.
tkfiledialog
a trois fonctions,
Fonction | Paramètres | Description |
---|---|---|
.askopenfilename |
Répertoire, Titre, Extension | Pour ouvrir le dossier : Dialogue qui demande la sélection d’un fichier existant. |
.asksaveasfilename |
Répertoire, Titre, Extension | Pour sauvegarder le fichier : Dialogue qui demande la création ou le remplacement d’un fichier. |
.askdirectory |
Aucun | Pour ouvrir le répertoire |
filemenu.add_command(label="Exit", command=app.quit)
Tkinter a une fonction interne de quit
qui quitte l’interface graphique racine. Nous pourrions simplement lier cette fonction existante à Exit
plutôt que de créer notre propre fonction exit
.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook