Lire un item d'un sous-menu avant clic ou appui sur RETURN

Bonjour le Forum,

C’est un membre de la ML debian-user-french qui me conseillait d’aller sur votre site, que j’ai donc découvert.

Je découvre Python et étant proche d’être aveugle je tente de réaliser des apps avec tkinter qui seraient entièrement vocalisées avec ‘espeak’.
En effet je m’aperçois que ce que j’ai su coder jusque présent n’est pas compatible avec mon lecteur d’écran Orca.

Je galère sur le sujet des items des sous-menus que je ne parviens pas du tout à vocaliser (quand ils prennent le focus mais avant qu’il y ait clic de la souris ou surtout de la frappe de Return) pour que leurs labels puissent être passés au module os.
Par contre, je n’ai pas de difficultés avec les widgets classiques.

Je passe d’un item au suivant avec les touches fléchées.

J’ai examiné moult alternatives avec les événements.

Auriez-vous un lien pour me dépanner ?

peterpan31

Bonjour @PETERPAN31 et bienvenue ici.

Tu aurais un exemple de code minimal de l’application ? Ça serait, je pense, plus simple de partir de ça pour pouvoir discuter d’éventuelles améliorations ou essais.

Bonjour,

Très simple le code dessous :

#!/usr/bin/python3

from tkinter import *

class MyMenu(Menu):
  def __init__(self,parent,*args, **kwargs):
    super().__init__(parent,*args, **kwargs)
    self.parent = parent
    self.label1='Nouveau'
    self.label2='Ouvrir'
    self.label3='Quitter'

  def my_add(self):
    self.add_command(label=self.label1)
    self.add_command(label=self.label2)
    self.add_command(label=self.label3)

root = Tk()
menubar = Menu(root,activebackground='Black',activeforeground='White',font=('Arial',16))
menu=MyMenu(menubar,activebackground='Black',activeforeground='White',font=('Arial',16))
menu.my_add()
menubar.add_cascade(label="Fichier", menu=menu)

root.config(menu=menubar)

root.mainloop()

Le but est d’envoyer un label d’un item (label1 etc) à la commande 'os.system(‘espeak …’) pour que soit vocalisé le nom de l’item qui aurait le focus (événement à mon avis).
Or ces items ne semblent pas être des widgets et la méthode focus_get() renvoit le nom du menu contenant ces items et pas l’item “focussé”.

Quand on est bigle on passe en général d’un objet à l’autre ou d’un item au suivant avec les touches fléchées ou .
J’ai tenté diverses manips avec bind sur mais je n’obtiens jamais les labels de ces items.

Comme je disais initialement, il faut que la lecture de l’item soit faite AVANT FRAPPE DE RETURN BIEN SÛR.

Auriez-vous une piste ?

Merci

Pierre ESTREM