Creazione di un nuovo dispatcher di eventi di input in Pyglet (input a infrarossi)

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

  •  05-07-2019
  •  | 
  •  

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top