Bonsoir,
Dessous un code totalement en chantier qui devrait vocaliser les labels des items.
Dans une mouture simplifiée j’avais pu observer le passage de ‘normal’ à ‘active’ pour des items.
Note: contrairement à ce que semble indiquer la doc il ne s’agit pas de ‘NORMAL’ et ‘ACTIVE’ (notez les majuscules).
Pour mes premiers essais, je tente la chose avec un seul menu ‘Fichier’ et j’affiche les états (state) de ses items pour en voir passer un à ‘active’.
J’ai essayé différents évènements et ils demeurent tous ‘normal’…
J’ai un gros doute où placer le ‘bind’ et sur quoi le placer (ici je l’applique à chaque menu).
Un “pro” et patient saurait me “corriger” ?
#!/usr/bin/python3
"""
Définition d'une fenêtre comportant une barre de menus dont tous les items sont vocalisés
"""
from tkinter import *
# Dictionnaire pour la définition des menus
items = {
'Fichier':
[
['Nouveau','cmd1'],
['Ouvrir','cmd2'],
['Imprimer','cmd3'],
['Quitter','cmd4']
]
#'Edition':
# [
# ['Copier','cmd1'],
# ['Coller','cmd2'],
# ['Couper','cmd3']
# ]
}
class MyWindow(Tk):
def __init__(self,items,font,*args,**kwargs):
Tk.__init__(self,*args,**kwargs)
self.items = items
self.geometry('400x200')
self.title('ACIAH')
self.font = font
# Dictionnaire recevant les paires "nom du menu" / instance du menu associé
self.menus = {}
self.create_menu_bar(self.font)
self.config(menu=self.menu_bar)
# Méthode qui vocalise les items (en chantier !)
def speak(self,key):
for i in [0,1,2,3]:
print(self.menus[key].entrycget(i,'state'))
def create_menu_bar(self,font):
self.menu_bar = Menu(self,activebackground='Black',activeforeground='White',font=font,takefocus=1)
for k in self.items:
self.menus[k] = Menu(self.menu_bar, tearoff=0,activebackground='Black',activeforeground='White',font=font)
for opt in self.items[k]:
self.menus[k].add_command(label=opt[0],command=self.menus[k].quit())
self.menu_bar.add_cascade(label=k,menu=self.menus[k])
self.menus[k].bind('',lambda e: self.speak(k))
if __name__ == '__main__':
window = MyWindow(items,('Arial',24,'bold'))
window.mainloop()
Merci
pierre estrem
2 messages - 2 participant(e)s