在Pyglet中创建新的输入事件调度器(红外输入)
我最近在pyglet-users小组问了这个问题,但没有得到回复,所以我在这里试试。
我想扩展Pyglet,让它能够使用lirc支持的红外输入设备。我之前用过pyLirc(http://pylirc.mccabe.nu/)和PyGame,现在想把我的应用程序重写成使用Pyglet。
通常情况下,要检查一个按钮是否被按下,你会定期查询pyLirc,看看它的队列里有没有按钮按下的记录。
我的问题是,如何在Pyglet中正确地集成pyLirc?
我希望它能像当前窗口的键盘和鼠标事件那样工作,但我不知道从哪里开始。
我知道我可以创建一个新的事件调度器,在里面注册新的事件类型,并在查询后进行分发,像这样:
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
但是如果我使用pyglet.app.run(),我该如何将这个调度器集成到应用程序的主循环中,以便持续调用poll()?另外,我该如何把这个事件调度器连接到我的窗口,以便它能像鼠标和键盘的调度器一样工作?
我看到我可以设置一个调度器,使用pyglet.clock.schedule_interval定期调用poll(),但这样做是正确的吗?
2 个回答
1
正确的方法就是能用的方法。如果你发现了更好的办法,随时可以改成那个。
1
可能对提问者来说已经太晚了,但我还是想回复一下,希望对其他人有帮助。
创建事件调度器,并使用 pyglet.clock.schedule_interval 定期调用 poll() 是个不错的方法。
要把事件调度器连接到你的窗口,你需要先创建一个调度器的实例,然后调用它的 push_handlers 方法:
dispatcher.push_handlers(window)
这样你就可以像处理窗口中其他事件一样处理这些事件了。