Concevons l’architecture de notre menu de logiciel :

Un menu classique, standard avec les intitulés “Fichier” et “Edition” + un pop-up d’informations sous l’intitulé “A propos”. Le logiciel (fenêtre) étant un prétexte pour construire ce menu, toutes les fonctions attachées aux items du menu n’exécutent aucun bloc de code. C’est pourquoi, chacune d’entre elles est affublée du mot-clé “pass” permettant finalement de ne rien faire et de se concentrer sur l’ergonomie de ce menu.

Seules les fonctionnalités permettant de quitter le logiciel et permettant de faire apparaître un pop-up sont opérationnelles.

from tkinter import *
from tkinter import messagebox

fenetre = Tk()
fenetre.title("Le Coin du Programmeur")
fenetre.geometry("400x300")

def nouveau():
    pass

def ouvrir():
    pass

def enregistrer():
    pass

def enregistrer_sous():
    pass

def quitter_logiciel():
    fenetre.destroy()
    
def selectionner():
    pass

def selectionner_tout():
    pass

def copier():
    pass

def couper():
    pass

def coller():
    pass

def a_propos():
    mon_message = messagebox.showinfo("Ce tutoriel de menu est réalisé par :", "Le Coin du Programmeur \n http://python.lecoinduprogrammeur.org/ \n Fabrice Dumont")

barremenu = Menu(fenetre)
fenetre.config(menu = barremenu)

fichier_menu = Menu(barremenu, tearoff = 0)
barremenu.add_cascade(label = "Fichier", menu = fichier_menu)
fichier_menu.add_command(label = "Nouveau", command = nouveau)
fichier_menu.add_command(label = "Ouvrir", command = ouvrir)
fichier_menu.add_command(label = "Enregistrer", command = enregistrer)
fichier_menu.add_command(label = "Enregistrer sous", command = enregistrer_sous)
fichier_menu.add_separator()
fichier_menu.add_command(label = "Quitter le logiciel", command = quitter_logiciel)

edition_menu = Menu(barremenu, tearoff = 0)
barremenu.add_cascade(label = "Edition", menu = edition_menu)
edition_menu.add_command(label = "Sélectionner", command = selectionner)
edition_menu.add_command(label = "Sélectionner tout", command = selectionner_tout)
edition_menu.add_separator()
edition_menu.add_command(label = "Copier", command = copier)
edition_menu.add_command(label = "Couper", command = couper)
edition_menu.add_command(label = "Coller", command = coller)

apropos = Menu(barremenu, tearoff = 0)
barremenu.add_cascade(label = "A propos", menu = apropos)
apropos.add_command(label = "Le Coin du Programmeur", command = a_propos)

fenetre.mainloop()

Commentaires :

def nouveau():
pass rien ne se passe 🙂

def quitter_logiciel():
fenetre.destroy() détruit la fenêtre du logiciel

from tkinter import messagebox Comme vous l’aurez compris, messagebox permet de créer une fenêtre pop-up.

barremenu = Menu(fenetre) est le menu de la classe Menu apparaissant à l’ouverture du logiciel. Celui-ci est enfant de la fenêtre fenetre.

fichier_menu = Menu(barremenu, tearoff = 0) est un menu de la classe Menu, enfant du menu barremenu. tearoff = 0, il n’est pas détachable de son parent. Par défaut, tearoff = 1 et est donc détachable. Cette fonctionnalité est matérialisée par un trait en pointillés cliquable.

barremenu.add_cascade(label = “Fichier”, menu = fichier_menu) add_cascade permet lors d’un clic de faire apparaître un sous-menu en cascade dont le nom générique sera Fichier.

fichier_menu.add_command(label = “Nouveau”, command = nouveau) add_command permet de faire appel à une fonction (ou une méthode dans le cadre d’une classe) exécutant un bloc de code. Ici, le nom affiché sera “Nouveau” et la fonction exécutée sera nouveau définie plus-haut.

fichier_menu.add_separator() insère une barre horizontale séparatrice dans fichier_menu.

A l’exécution :

En cliquant sur “Le Coin du Programmeur” :

Si vous changez la valeur de tearoff de 0 pour 1 :

fichier_menu = Menu(barremenu, tearoff = 1)

Vous obtenez à l’exécution :

L’apparition d’un trait pointillé cliquable permettant de détacher le menu de son parent.

Et en conclusion, si vous voulez quitter le logiciel, Fichier > Quitter le logiciel

Le code de ce script :