Создание нового диспетчера событий ввода в 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, но это ли правильный способ сделать это?
Решение
Возможно, для ФП уже слишком поздно, но я все равно отвечу, если это пригодится кому-то еще.
Создание диспетчера событий и использование pyglet.clock.schedule_interval для регулярного вызова poll () - хороший способ сделать это.
Чтобы прикрепить диспетчер событий к вашему окну, вам нужно создать экземпляр диспетчера и затем вызвать его метод push_handlers :
dispatcher.push_handlers(window)
Затем вы можете обрабатывать события так же, как и любые другие события, поступающие в окно.
Другие советы
Правильный путь - это то, что работает. Вы всегда можете изменить его позже, если найдете лучший способ.