Creando un nuevo despachador de eventos de entrada en Pyglet (entrada de infrarrojos)

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

  •  05-07-2019
  •  | 
  •  

Pregunta

Hace poco hice esta pregunta en el grupo de usuarios de pyglet, pero obtuve una respuesta, así que lo estoy intentando aquí.

Me gustaría extender Pyglet para poder usar un dispositivo de entrada de infrarrojos compatible con lirc. He usado pyLirc antes ( http://pylirc.mccabe.nu/ ) con PyGame y quiero para volver a escribir mi aplicación para usar Pyglet en su lugar.

Para ver si se presionó un botón, normalmente sondeará a pyLirc para ver si hay algún botón presionado en su cola.

Mi pregunta es, ¿cuál es la forma correcta en Pyglet de integrar pyLirc?

Preferiría que funcionara de la misma manera que los eventos del teclado / mouse de la ventana actual, pero no estoy seguro de por dónde empezar.

Sé que puedo crear un nuevo EventDispatcher, en el que puedo registrar el nuevos tipos de eventos y enviarlos después de la encuesta, como así:

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

Pero, ¿cómo lo integro en el bucle principal de la aplicación para seguir llamando a poll () si uso pyglet.app.run () y cómo adjunto este eventdispatcher a mi ventana para que funcione igual que el mouse y despachadores de teclado?

Veo que puedo configurar un programador para llamar a poll () a intervalos regulares con pyglet.clock.schedule_interval, pero ¿es esta la forma correcta de hacerlo?

¿Fue útil?

Solución

Probablemente sea demasiado tarde para el OP, pero responderé de todas formas en caso de que sea útil para alguien más.

Crear el despachador de eventos y usar pyglet.clock.schedule_interval para llamar a poll () a intervalos regulares es una buena manera de hacerlo.

Para adjuntar el despachador de eventos a su ventana, debe crear una instancia del despachador y luego llamar a su push_handlers método:

dispatcher.push_handlers(window)

Luego, puede tratar los eventos como cualquier otro evento que llegue a la ventana.

Otros consejos

La forma correcta es lo que funcione. Siempre puedes cambiarlo más tarde si encuentras una mejor manera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top