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

Недавно я задал этот вопрос в группе пользователей 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, но правильно ли это сделать?


person Andre Miller    schedule 30.07.2009    source источник


Ответы (2)


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

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

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

dispatcher.push_handlers(window)

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

person Kiv    schedule 11.08.2009

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

person Vezquex    schedule 07.08.2009