Criando um novo distribuidor evento de entrada em Pyglet (entrada infravermelha)

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Eu recentemente fiz esta pergunta no grupo de usuários Pyglet, mas tem resposta, então eu estou tentando aqui em vez.

Eu gostaria de estender Pyglet de ser capaz de usar um dispositivo de entrada infra vermelho suportado por LIRC. Eu usei pyLirc antes ( http://pylirc.mccabe.nu/ ) com PyGame e quero para reescrever meu aplicativo para usar Pyglet vez.

Para ver se um botão foi pressionado você normalmente poll pyLirc para ver se há algum pressiona o botão na fila.

A minha pergunta é, qual é a maneira correta em Pyglet para integrar pyLirc?

Eu preferiria se ele funciona no mesmo era como os eventos atuais teclado janela / mouse, mas não tenho certeza por onde começar.

Eu sei que posso criar uma nova EventDispatcher, em que eu possa registrar o novos tipos de eventos e enviá-los depois da votação, assim:

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

Mas como faço para integrar isso em loop principal do aplicativo para continuar a chamar poll () se eu usar pyglet.app.run () e como faço para anexar este EventDispatcher a minha janela para que ele funciona o mesmo que o do rato e despachantes de teclado?

Eu vejo que eu posso configurar um agendador para pesquisa call () em intervalos regulares com pyglet.clock.schedule_interval, mas é esta a maneira correta de fazê-lo?

Foi útil?

Solução

É provavelmente demasiado tarde para o OP, mas vou responder mesmo assim no caso, é útil para qualquer outra pessoa.

Criando o despachante evento e usando pyglet.clock.schedule_interval a pesquisa chamada () em intervalos regulares é uma boa maneira de fazê-lo.

Para anexar o despachante evento para sua janela, você precisa criar uma instância do despachante e, em seguida, chamar a sua push_handlers método:

dispatcher.push_handlers(window)

Em seguida, você pode tratar os eventos, assim como quaisquer outros eventos que entram pela janela.

Outras dicas

A maneira correta é o que funciona. Você sempre pode mudá-lo mais tarde, se você encontrar uma maneira melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top