python - 确定键盘事件顺序的规则?(Python)
问题描述
我目前有这样的情况:
keyboard.on_press(Function1)
keyboard.on_press_key(';', Function2)
keyboard.on_press_key('/', Function3)
通过试用,我发现 on_press_key() 事件总是首先发生(并且我的程序的逻辑取决于它)但我不知道为什么,或者它是否是硬件或操作系统特定的事情,可能不一致并且如果在其他系统上使用会中断(?)。
我试过搜索,但找不到任何东西。是否有可靠的方法来了解事件触发的顺序,或者强制它们以特定的顺序触发?
解决方案
看源码,控制流程如下:
- keyboard.on_press
handlers
在存储在全局_listener
obj中的对象中添加一个条目。 - keyboard.on_press_key在
nonblocking_keys
字典中添加一个条目。
当一个键事件被引发时,process
被调用,它在调用 handlers 之前调用pre_process_event (它本身调用nonblocking_keys
字典中的所有回调)。
def process(self):
"""
Loops over the underlying queue of events and processes them in order.
"""
assert self.queue is not None
while True:
event = self.queue.get()
if self.pre_process_event(event):
self.invoke_handlers(event)
self.queue.task_done()
然而,这只是一个可能会随着新版本而发展的实现细节,您最好不要依赖它。你能为前任Function1
打电话Function2
吗Function3
?
推荐阅读
- java - 看似随机的 tika 性能问题
- hyperledger-fabric - 创建同意者时出错:无法恢复持久的 raft 数据:无法创建或读取 WAL:无法打开 WAL:fileutil:文件已锁定
- flutter - 为什么我的 Navigator.push,在抽屉里没有上下文?
- php - 浏览器呼叫代理会议
- sql - 将两个不同文件中的 XML 放入一个 SQL 表中
- android - 添加 jar 库时出错。什么可能出错?
- javascript - 如何在 Angular 中实现 SYNC 方法,等待响应,无需订阅,就像 C# 中的 SYNC 方法一样?
- c++ - std::stoi 的基本参数
- amazon-web-services - 将 Tensroflow 库部署为 AWS Lambda 层
- html - 如何在 ng2smart 表中使用图标而不是按钮