Tutoriel Tkinter - Menubar

Jinku Hu 3 janvier 2023
  1. Barre de menus de base de Tkinter
  2. Commande Tkinter Menubar
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()

Tkinter Menubar Basic

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.

Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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