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

os.system() : trop lent

$
0
0

Bonsoir,

Dessous le code qui fonctionne à peu près si on affiche l’item actif de tout menu, mais si je fais vocaliser le label ( avec ‘espeak’) alors je constate une mise à jour très ralentie du nouvel item focussé (après appui sur une flèche).

Si vous n’avez donc pas ‘espeak’ installé, vous ne devriez pas pouvoir m’aider.

Mais en général, l’appel à une routine du système avec ‘os.system()’ est-il très lent ?
Existe-t-il une alternative ?

#!/usr/bin/python3.8

"""
Définition d'une fenêtre comportant une barre de menus dont tous les items sont vocalisés
"""

from tkinter import *
import os

# 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 menu_select(self, event):
    label = self.eval(f'{event.widget} entrycget active -label')
#    print(label)
    os.system(f'/usr/bin/espeak {label}')
  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.event_generate('<>'))
      self.menu_bar.add_cascade(label=k,menu=self.menus[k])
      self.menu_bar.bind_class('Menu','<>', lambda e: self.menu_select(e))

if __name__ == '__main__':
  window = MyWindow(items,('Arial',24,'bold'))
  window.mainloop()

Merci

pierre estrem

3 messages - 2 participant(e)s

Lire le sujet en entier


Viewing all articles
Browse latest Browse all 3409

Trending Articles