6
votes

Comment puis-je passer des arguments supplémentaires à un rappel d'événement?

est-il possible de passer des arguments supplémentaires à un rappel d'événement?

Par exemple, si mon événement se liant ressemblait à ceci; xxx

Comment puis-je passer les arguments à ma méthode? xxx


4 Réponses :


4
votes

Utilisez Lambda:

self.Bind(wx.EVT_BUTTON, lambda event, args=args: self.do_something(event, args), self.button) 

self.do_something(self,event,arguments):
    """do something with arguments"""
    pass


2 commentaires

Lambda peut vous gâcher si vous l'utilisez dans une boucle. Je préfère l'approche FuncTools.Partiale.


@Foglebird, le désordre peut se produire si vous écrivez Evénement Lambda: Self.do_Something (Evénement, Args) Au lieu de Evénement Lambda, args = args: auto.do_something (événement, arguments) (note args = args )



9
votes

Utilisez FuncTools.Partial , Ou dans l'affaire Général, un lambda expression . < P> La forme partielle serait xxx

Notez que dans ce cas, l'argument sera transmis à la fin de la liste des arguments. La forme Lambda équivalente est la suivante: xxx


0 commentaires

1
votes

Ce n'est pas clair lorsque vous souhaitez fournir ces arguments, mais si vous souhaitez les fournir à lidez heure (telle que vous pouvez avoir un do_something qui prend en charge plusieurs utilisations. ), vous pouvez utiliser functools.Partial : xxx

puis lorsque do_something est appelé, il sera appelé avec le argument Vous avez passé dans partiel , ainsi que l'événement passé par le rappel.


1 commentaires

J'ai oublié de le faire de cette façon. Je viens d'utiliser lambda moi-même.



1
votes

Utilisez une fonction Lambda. Il y a une documentation sur cette documentation sur le wxpython wiki . J'en ai aussi écrit à ce sujet dans mon Tutoriel Lambda . Voici l'exemple boiteux que j'ai créé quand j'ai écrit que (qui est aussi dans l'article): xxx


0 commentaires