Создание нового диспетчера событий ввода в Pyglet (инфракрасный ввод)

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

  •  05-07-2019
  •  | 
  •  

Вопрос

Недавно я задал этот вопрос в группе пользователей pyglet, но получил ответ, поэтому я пытаюсь здесь вместо этого.

Я хотел бы расширить Pyglet, чтобы иметь возможность использовать инфракрасное устройство ввода, поддерживаемое lirc. Ранее я использовал pyLirc ( http://pylirc.mccabe.nu/ ) с PyGame, и я хочу переписать мое приложение, чтобы использовать вместо него Pyglet.

Чтобы узнать, была ли нажата кнопка, вы обычно запрашиваете pyLirc, чтобы узнать, есть ли какие-либо нажатия кнопки в ее очереди.

Мой вопрос: как правильно в Pyglet интегрировать pyLirc?

Я бы предпочел, чтобы он работал так же, как и текущие события клавиатуры / мыши в окне, но я не уверен, с чего начать.

Я знаю, что могу создать новый EventDispatcher, в котором я могу зарегистрировать новые типы событий и отправлять их после опроса, например так:

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

Но как мне интегрировать это в основной цикл приложения, чтобы продолжать вызывать poll (), если я использую pyglet.app.run (), и как мне прикрепить этот обработчик событий к моему окну, чтобы он работал так же, как мышь и диспетчеры клавиатуры?

Я вижу, что могу настроить планировщик для регулярного вызова poll () с помощью pyglet.clock.schedule_interval, но это ли правильный способ сделать это?

Это было полезно?

Решение

Возможно, для ФП уже слишком поздно, но я все равно отвечу, если это пригодится кому-то еще.

Создание диспетчера событий и использование pyglet.clock.schedule_interval для регулярного вызова poll () - хороший способ сделать это.

Чтобы прикрепить диспетчер событий к вашему окну, вам нужно создать экземпляр диспетчера и затем вызвать его метод push_handlers :

dispatcher.push_handlers(window)

Затем вы можете обрабатывать события так же, как и любые другие события, поступающие в окно.

Другие советы

Правильный путь - это то, что работает. Вы всегда можете изменить его позже, если найдете лучший способ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top