Bonjour

Dans mon projet d'application en python, il y a 2 modes : le mode "Feuilletage" (le mode par défaut) et le mode "Édition". Pour passer de l'un à l'autre, on va dans le menu "Édition" et on choisit la ligne correspondante. (J'ajouterai peut-être un bouton de bascule après...)
Je voudrais :
--> en mode "Feuilletage", que seule la ligne "Mode édition" soit cliquable et "Mode feuilletage" soit désactivé (grisé).
--> en mode "Édition", que seule la ligne "Mode feuilletage" soit cliquable et "Mode édition" soit désactivé (grisé).

J'arrive à faire un affichage dynamique du texte d'un "Label" ou d'un "Button".
Ça fonctionne bien. Cependant, le changement "dynamique" des valeurs de mes "StringVar" ne semblent pas affecter (dynamiquement) les paramètres du menu... Ils sont affectés au démarrage et puis c'est fini...

J'ai réalisé un programme minimaliste pour isoler et résoudre le problème mais je ne trouve toujours pas la faille... Le voici :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# Essai de modification d'un paramère de menu
import tkinter as tk
root = tk.Tk()
root.geometry("200x100")
 
# Création des variables de contrôle édition / feuilletage (griser les menus
a = tk.StringVar(master=root)
b = tk.StringVar(master=root)
 
# Création de la fenêtre contenant les informations
bar_menu = tk.Menu(root)
root.config(menu=bar_menu)
 
# Fonctions activées par les menus
def mode_feuil():              # Griser "Feuilletage" et activer "Édition"
    a.set("disabled")
    b.set("active")
 
def mode_edit():               # Griser "Édition" et activer "Feuilletage"
    a.set("active")
    b.set("disabled")
 
def menu():
    mode_feuil()
    # Menu "Fichier"
    fichier = tk.Menu(bar_menu, tearoff=0)
    fichier.add_command(label="Fermer", command=quit)
    bar_menu.add_cascade(label="Fichier", menu=fichier)
    # Menu "Edition"
    edition = tk.Menu(bar_menu, tearoff=0)
    edition.add_command(label="Mode feuilletage", command=mode_feuil, state=a.get())
    edition.add_command(label="Mode édition", command=mode_edit, state=b.get())
    bar_menu.add_cascade(label="Édition", menu=edition)
 
label = tk.Label(root, textvariable=a)
label.pack()
bouton1 = tk.Button(root, textvariable=a, command=mode_feuil)
bouton1.pack()
bouton2 = tk.Button(root, textvariable=b, command=mode_edit)
bouton2.pack()
 
menu()
mode_feuil()
 
root.mainloop()
Auriez-vous une idée de comment affecter dynamiquement le paramètre "state" d'un menu ?

Merci à vous