我最近在pyglet-users组中问了这个问题,但得到了回复,所以我在这里尝试了。

我想扩展Pyglet以便能够使用lirc支持的红外输入设备。我之前使用pyLirc( http://pylirc.mccabe.nu/ )和PyGame一起使用了pyLirc重写我的应用程序以改为使用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

但是,如果我使用pyglet.app.run(),如何将其集成到应用程序的主循环中以继续调用poll(),如何将此eventdispatcher附加到我的窗口,使其与鼠标和键盘调度员?

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

有帮助吗?

解决方案

对于OP来说可能为时已晚,但无论如何我都会回复,以防它对其他人有帮助。

创建事件调度程序并使用pyglet.clock.schedule_interval定期调用poll()是一种很好的方法。

要将事件调度程序附加到窗口,您需要创建调度程序的实例,然后调用其 push_handlers 方法:

dispatcher.push_handlers(window)

然后你可以像进入窗口的任何其他事件一样对待事件。

其他提示

正确的方法是无论有效。如果找到更好的方法,您可以随时更改。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top