python - 在 Pyglet 中创建一个新的输入事件调度程序(红外输入)

标签 python pyglet

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

我想扩展 Pyglet 以便能够使用 lirc 支持的红外输入设备。我之前在 PyGame 中使用过 pyLirc ( http://pylirc.mccabe.nu/ ),我想重写我的应用程序以使用 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() 以及如何将此事件调度程序附加到我的窗口,以便它的工作方式与鼠标相同,键盘调度程序?

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

最佳答案

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

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

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

dispatcher.push_handlers(window)

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

关于python - 在 Pyglet 中创建一个新的输入事件调度程序(红外输入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1206628/

相关文章:

Python 和子进程输入管道

python - Keras:方法 on_batch_end() 很慢但我没有回调?

python - 为什么 env.render() 在 Jupyter 上不起作用?

python - 如何让 Pyglet 为 Python 3 工作?

python - 编码和解码 .gif 文件以与 pyglet 一起使用并使用 pyinstaller 制作成 .exe

python 正则表达式 "parenthesis unbalanced error"在 ubuntu 上,但不在 macos 机器上

python - 使用 Pandas 创建矩阵结构

python - ImportError : Can't find framework/System/Library/Frameworks/OpenGL. 框架

python - 如何像 Pygame 一样管理 pyglet 中的事件?

python - Pyglet 行走动画。错误: 'NoneType' object has no attribute 'draw'