Téléchargement
illégal
Posez votre question Signaler

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

teebo 33591Messages postés 14 octobre 2004Date d'inscription ModérateurStatut 24 février 2011Dernière intervention - Dernière réponse le 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
Lire la suite 

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

4 réponses
Réponse
+1
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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...
Ajouter un commentaire
Réponse
+0
moins plus
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 ;)
Ajouter un commentaire
Ce document intitulé « [python]Générer et invoquer un évènement » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?