Python中的跨平台多媒体按键

3
我正在开发一个需要接收多媒体按键(播放/暂停、跳过、上一个)的应用程序。我希望能在Mac、Linux(主要版本)和Windows上运行。我看到了一个适用于GNOME的解决方案,它似乎可以实现我的需求,但从来没有什么东西可以在所有主要平台上捕获这些按键。由于该应用程序将在后台运行且永远不会具有焦点,因此我需要能够全局捕获按键。

目前,我并没有强烈依赖Python,但由于我希望能够针对多个平台进行开发,Python似乎是不错的选择。是否有人编写了任何可跨平台完成此任务的库?我还没有找到任何可行的方案。

PyQT看起来是一个可能可行的选择,但是有些人暗示在OSX上全局按键检测可能存在问题。


2
我不想说什么负面的话,但我怀疑你很难找到一个多平台的解决方案。许多平台甚至没有播放/暂停键。 - user590028
我知道这一点。很明显,我只针对那些这些密钥的用户。如果我选择Python,我预计会需要一个库来处理所有平台之间的差异(而不是手动编写支持每个平台的代码)。我看到了一些接近的游戏库(并且是跨平台的),但无法全局检测密钥。 - Dan Hlavenka
OS X全局访问需要启用辅助设备访问。请参见https://github.com/mjpieters/quodlibet_plugins/blob/master/events/osxmmkey.py,了解一些访问媒体键的Python代码(在单独的进程中,因为事件循环是必需的,并且会干扰编写此插件的程序Quod Libet)。 - Martijn Pieters
2个回答

0

我几个月前接手了python-mmkeys。实际上,我从未尝试过编译它,但它被包含在一个项目的代码中。

它依赖于PyGTK,但可用于GNU/Linux、MacOX和Windows。

代码非常易于使用:

import mmkeys
keys = mmkeys.Mmkeys()
keys.connect("mm_prev", previous_cb)
keys.connect("mm_next", next_cb)
keys.connect("mm_playpause", playpause_cb)

这看起来很诱人,但我无法编译它。安装脚本抱怨“致命错误:Python.h:没有那个文件或目录”,尽管我已经安装了python-dev。有什么指针吗? - Dan Hlavenka
抱歉,我不太了解C语言。你可以尝试使用Debian软件包 - Paco
@Paco 我能够从repo安装这个模块,但即使我将 keys = mmkeys.Mmkeys() 更正为 keys = mmkeys.MmKeys() 后,仍然出现错误 Error grabbing key 173, 0xa0c2818 五次 (每个支持的键一次);不同的键码,相同的十六进制码。以root身份运行也没有帮助。 - Dan Hlavenka
我并没有为此编写代码,但这里有一个例子。点击查看 - Paco

0
使用PyQt(或PySide),您可以使用Qt::AA_CaptureMultimediaKeys应用程序标志,以启用跨平台捕获多媒体键。原则上,使用该标志,您的Qt程序应该能够接收键盘事件,当用户按下多媒体键时,如播放(Qt::Key_MediaPlay)、停止(Qt::Key_MediaStop)、暂停(Qt::Key_MediaPause)等。有关受支持键的完整列表,请参阅文档
我不能确定所有的键都能在所有平台上支持,但总体来说,Qt旨在在不同操作系统之间提供非常好的互操作性。我认为通过一个简单的原型,你应该能够很快回答这个问题(我没有访问MacOS环境,所以无法在那里测试,但对于Windows和Linux应该可以工作)。有关如何使用Qt处理键盘事件的更多信息,请查看QKeyEvent类的文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接