在Pyglet中创建新的输入事件分派器(红外线输入)

2024-10-01 17:30:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近在pyglet用户组中提出了这个问题,但是得到了回应,所以我改在这里尝试。在

我想扩展Pyglet,使之能够使用lirc支持的红外线输入设备。我以前在PyGame中使用过pylorc(http://pylirc.mccabe.nu/),我想重写我的应用程序来使用Pyglet。在

为了查看某个按钮是否被按下,您通常会轮询pyrlrc以查看其队列中是否有任何按钮按下。在

我的问题是,在Pyglet中,正确的方法是什么来整合Pyrirc?在

我更希望它能和当前的窗口键盘/鼠标事件一样工作,但是我不知道从哪里开始。在

我知道我可以创建一个新的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()以及如何将此eventdispatcher附加到窗口,使其与鼠标和键盘分派器的工作方式相同?在

我看到我可以设置一个调度程序来定期调用poll()pyglet.clock.schedule_时间间隔,但这是正确的方法吗?在


Tags: 方法selfevent应用程序事件code鼠标键盘
2条回答

正确的方法是一切有效。如果你找到一个更好的方法,你可以随时改变它。在

对手术来说可能已经太晚了,但我还是会回复,以防对其他人有帮助。在

创建事件调度器并使用pyglet.clock.schedule_时间间隔定期调用poll()是一种很好的方法。在

要将事件分派器附加到窗口,需要创建分派器的实例,然后调用其push_handlers方法:

dispatcher.push_handlers(window)

然后,您可以像对待窗口中的任何其他事件一样对待这些事件。在

相关问题 更多 >

    热门问题