Création d'un nouveau répartiteur d'événements d'entrée dans Pyglet (entrée infrarouge)

StackOverflow https://stackoverflow.com/questions/1206628

  •  05-07-2019
  •  | 
  •  

Question

J'ai récemment posé cette question au groupe pyglet-utilisateurs, mais j'ai obtenu une réponse, alors j'essaie ici à la place.

Je voudrais étendre Pyglet pour pouvoir utiliser un périphérique de saisie infrarouge pris en charge par lirc. J'ai déjà utilisé pyLirc ( http://pylirc.mccabe.nu/ ) avec PyGame et moi-même. réécrire mon application pour utiliser Pyglet à la place.

Pour savoir si un bouton a été actionné, vous devez généralement interroger pyLirc pour savoir si un bouton est enfoncé dans sa file d'attente.

Ma question est la suivante: quelle est la bonne façon 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 un nouveau EventDispatcher, dans lequel je peux enregistrer le nouveaux types d’événements et les répartir après le sondage, comme suit:

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

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

Était-ce utile?

La solution

Il est probablement trop tard pour le PO, mais je répondrai quand même au cas où cela serait utile à quelqu'un d'autre.

Créer le répartiteur d’événements et utiliser pyglet.clock.schedule_interval pour appeler poll () à intervalles réguliers est un bon moyen de le faire.

Pour attacher le répartiteur d'événements à votre fenêtre, vous devez en créer une instance, puis appeler son push_handlers , méthode:

dispatcher.push_handlers(window)

Vous pouvez ensuite traiter les événements comme n'importe quel autre événement entrant dans la fenêtre.

Autres conseils

La bonne façon de procéder est de savoir ce qui fonctionne. Vous pourrez toujours le changer plus tard si vous trouvez un meilleur moyen.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top