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

Résolu/Fermé
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 - 26 oct. 2006 à 09:47
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 - 26 oct. 2006 à 10:40
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
A voir également:

4 réponses

sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
26 oct. 2006 à 10:36
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
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
26 oct. 2006 à 10:08
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.
0
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
26 oct. 2006 à 10:16
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...
0
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
26 oct. 2006 à 10:40
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 ;)
0