Quantcast
Channel: AFPy's Planet
Viewing all articles
Browse latest Browse all 3409

Les 'state' de mes items ne passent jamais à 'active'

$
0
0

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

Lire le sujet en entier


Viewing all articles
Browse latest Browse all 3409

Trending Articles