我目前正在开发一个 python 项目,以实现跨平台将关键事件检测和解释为字符/名称。我一直在使用 python-xlib 为 X11 提供支持,但最近在将键事件的键码转换为相应的键符的过程中遇到了困难。
我的代码快照在这里:https ://gist.github.com/SavinaRoja/7306962
问题特别出现在 PyKeyboardEvent 类的使用中,我能够在其中检索键事件的事件数据,但不能将它们的键码解释为键符。Xlib.display 的 keycode_to_keysym 函数不能正常工作。
在阅读有关 X11 并通过 xev 实用程序源代码确认时,似乎要使用的适当 Xlib 函数是 XLookupString。如果我用 C(我才开始学习的一种语言)编码,使用这个函数会很简单,但是我目前对使用 python 的函数感到困惑。我考虑了两种选择:我可能会尝试利用和扩展 python-xlib 的协议来调用 XLookupString,或者我可能会尝试使用 ctypes 来调用 XLookupString。我的代码包括对后者的尝试(不起作用,但显示了我目前的位置):
from ctypes import *
XLookupString = cdll.LoadLibrary('libX11.so').XLookupString
char_buffer = create_string_buffer(257)
keysym = c_int() # the important value
count = XLookupString(byref(event), # TypeError, not a ctypes instance
byref(char_buffer),
len(char_buffer),
keysym,
None)
我怀疑我缺少将事件类从 python-xlib 转换为 XLookupString 的适当 C 结构的能力,或者解释从 X 服务器接收到的数据的能力(python-xlib 解析到事件实例中)进入这样的结构。我的这个怀疑是正确的吗?如果是这样,我需要学习哪些工具?
在这一点上,我可能缺少很多关于 python 和 C 之间接口的基本信息和技能,所以我花时间在我的通识教育中弥补这个差距。如果有人具体了解我的问题或我应该如何对相关主题进行研究,我很想听听。