2009-07-30 4 views
1

J'ai récemment posé cette question dans le groupe pyglet-users, mais j'ai reçu une réponse, alors j'essaye ici.Création d'un nouveau répartiteur d'événements d'entrée dans Pyglet (entrée infrarouge)

Je voudrais étendre Pyglet pour pouvoir utiliser un périphérique d'entrée infrarouge supporté par lirc. J'ai utilisé pyLirc avant (http://pylirc.mccabe.nu/) avec PyGame et je veux réécrire mon application pour utiliser Pyglet à la place.

Pour voir si un bouton a été enfoncé, vous interrogez typiquement pyLirc pour voir si un bouton est pressé dans sa file d'attente.

Ma question est la suivante: quelle est la manière correcte d'intégrer pyLirc dans Pyglet?

Je préférerais que cela fonctionne de la même manière que les événements clavier/souris de la fenêtre en cours, mais je ne sais pas par où commencer.

Je sais que je peux créer une nouvelle EventDispatcher, où je peux enregistrer les nouveaux types d'événements et de les envoyer après le scrutin, comme si:

class pyLircDispatcher(pyglet.event.EventDispatcher): 
    def poll(self): 
     codes = pylirc.nextcode() 
     if codes is not None: 
      for code in codes: 
       self.dispatch_event('on_irbutton', code) 

    def on_irbutton(self, code): 
     pass 

Mais comment ce dois-je intégrer cela dans l'application principale boucle pour continuer à appeler poll() si j'utilise pyglet.app.run() et comment attacher ce eventdispatcher à ma fenêtre pour qu'il fonctionne de la même manière que les répartiteurs de souris et de clavier?

Je vois que je peux mettre en place un planificateur pour appeler poll() à intervalles réguliers avec pyglet.clock.schedule_interval, mais est-ce la bonne façon de le faire?

Répondre

1

Il est probablement trop tard pour l'OP, mais je répondrai quand même si c'est utile pour quelqu'un d'autre.

La création du répartiteur d'événements et l'utilisation de pyglet.clock.schedule_interval pour appeler poll() à intervalles réguliers constituent un bon moyen de le faire.

Pour joindre le répartiteur d'événement à votre fenêtre, vous devez créer une instance du répartiteur, puis appeler sa méthode push_handlers:

dispatcher.push_handlers(window) 

Ensuite, vous pouvez traiter les événements comme tous les autres événements à venir dans le fenêtre.

1

La méthode correcte est celle qui fonctionne. Vous pouvez toujours le changer plus tard si vous trouvez un meilleur moyen.

Questions connexes