Creazione di un nuovo dispatcher di eventi di input in Pyglet (input a infrarossi)
Domanda
Di recente ho posto questa domanda nel gruppo utenti pyglet, ma ho ricevuto risposta, quindi sto provando qui invece
Vorrei estendere Pyglet per poter utilizzare un dispositivo di input a infrarossi supportato da lirc. Ho usato pyLirc prima ( http://pylirc.mccabe.nu/ ) con PyGame e voglio per riscrivere la mia applicazione per usare invece Pyglet.
Per vedere se è stato premuto un pulsante, in genere si esegue il polling di pyLirc per vedere se c'è un pulsante premuto nella sua coda.
La mia domanda è: qual è il modo corretto in Pyglet di integrare pyLirc?
Preferirei che funzionasse allo stesso modo degli attuali eventi tastiera / mouse della finestra, ma non sono sicuro da dove cominciare.
So di poter creare un nuovo EventDispatcher, in cui posso registrare il file nuovi tipi di eventi e inviarli dopo il polling, in questo modo:
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
Ma come posso integrarlo nel ciclo principale dell'applicazione per continuare a chiamare poll () se uso pyglet.app.run () e come posso collegare questo eventdispatcher alla mia finestra in modo che funzioni come il mouse e dispatcher di tastiera?
Vedo che posso impostare uno scheduler per chiamare poll () a intervalli regolari con pyglet.clock.schedule_interval, ma è questo il modo corretto di farlo?
Soluzione
Probabilmente è troppo tardi per l'OP, ma risponderò comunque nel caso in cui sia utile a chiunque altro.
Creare un dispatcher di eventi e usare pyglet.clock.schedule_interval per chiamare poll () a intervalli regolari è un buon modo per farlo.
Per collegare il dispatcher di eventi alla tua finestra, devi creare un'istanza del dispatcher e quindi chiamarlo metodo push_handlers :
dispatcher.push_handlers(window)
Quindi puoi trattare gli eventi proprio come qualsiasi altro evento che entra nella finestra.
Altri suggerimenti
Il modo corretto è quello che funziona. Puoi sempre cambiarlo in seguito se trovi un modo migliore.