[python]Générer et invoquer un évènement

Résolu
Salut tout le monde,

Est ce qu'il y a moyen de définir un évènement dans une classe Python pour pouvoir l'invoquer quand cet objet change?

Merci

--
Goutez l'amer ... Buvez le vinaigre

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    mmm... j'imagine que ton interface graphique peu passer une de ses méthodes en paramètre à un objet (pour s'enregistrer).
    (Vu qu'on peut passer des référence à des méthodes/fonctions en paramètre).

    Un truc du genre (syntaxe non vérifiée):

    class maclasse:
        def __init__(self):
            self.funcs = [] # List des callback enregistrées
        def register(self,func):
            self.funcs.append(func)  # On garde une référence de la fonction à appeller
        def __setattr__(self,key,value): # A chaque modification d'un attribut...
            self.__dict__[key] = value
            for func in self.funcs:
                func(key,value)  # ...on prévient ceux qui sont enregistrés qu'on a été modifié (on passe la valeur modifiée)
    


    et ton interface graphique pourrait alors s'enregistrer:
        def __init__(self):
            self.o = maclasse()
            self.o.register(update) # On passe la méthode en paramètre
        def update(self,key,value):
            ... # Mise à jour de mes widgets
    


    J'imagine qu'on pourrait aussi utiliser des décorateurs pour alléger un peu la syntaxe.
    1. Modérateur
      Quand tu dis "change", tu veux dire "quand un des attributs est changé" ?

      Tu peux implémenter __setattr__, ce qui ce permettra de détecter la moindre modification d'un attribut de ta classe.

      Si c'est juste pour surveiller un attribut particulier, il y a une autre méthode.
      1. Contributeur
        Non, je veux dire "J'ai ajouté un élément dans une collection qui est montrée sur l'interface utilisateur" en fait...
        Un genre de ObjectAddedEvent

        A moins que les List ou les Dico implémentent ça...
        1. Contributeur
          Voui effectivement, j'avais pas penser la méthode en tant qu'objet, mais vu comme ça, pas besoin de méchanisme spécifique pour les events :)

          Merci :)

          Décidément, je sens que je vais apprendre plein de truc avec pyBulle ;)