1 # -*- coding: utf-8 -*-
3 Décorateur, métaclasse et classe mixin pour faciliter
4 l'implémentation des gestionnaires d'événements pygame.
7 - hériter de EventHandlerMixin
8 - décorer les méthodes gestionnaires d'événements avec le décorateur 'event_handler'
9 en passant en paramètre le code d'événement pygame
11 Il n'existe aucune contrainte sur le nommage de la méthode décorée.
12 La méthode gestionnaire d'événement reçoit l'événement pygame comme unique paramètre.
17 class Machin(pygame.sprite.Sprite, EventHandlerMixin) :
21 @event_handler(pygame.KEYDOWN)
22 def handleKeyDown(self, event) :
31 def event_handler(eventType
) :
33 m
.__name
__ = 'eventHandler%s' % eventType
38 class MetaRenamer(type):
39 def __new__(mcs
, name
, bases
, dict) :
40 for k
, v
in dict.items() :
41 if isinstance(v
, types
.FunctionType
) :
43 print 'renommage de %s en %s' % (k
, v
.__name
__)
46 return type.__new
__(mcs
, name
, bases
, dict)
49 class EventHandlerMixin(object) :
50 __metaclass__
= MetaRenamer
52 def input(self
, event
) :
53 handler
= getattr(self
, 'eventHandler%s' % event
.type, lambda e
:None)