确定键盘事件顺序的规则? (Python)
Rules for determining the order of keyboard events? (Python)
我目前的情况是这样的:
keyboard.on_press(Function1)
keyboard.on_press_key(';', Function2)
keyboard.on_press_key('/', Function3)
通过试用我发现 on_press_key() 事件总是先发生(我的程序的逻辑依赖于它)但我不知道为什么,或者它是否是硬件 - 或者OS- 如果在其他系统上使用,可能会出现不一致和损坏的特定内容 (?)。
我试过搜索,但找不到关于此的任何内容。有没有一种可靠的方法可以知道事件的触发顺序,或者强制它们以特定的顺序触发?
查看源码,控制流程如下:
- keyboard.on_press 在存储在全局
_listener
对象中的 handlers
对象中添加一个条目。
- keyboard.on_press_key 在
nonblocking_keys
字典中添加一个条目。
当一个键事件被引发时,process
被调用,调用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()
不过这只是一个实现细节,可能会随着新版本的发展而变化,你最好不要依赖它。你可以在 Function2
和 Function3
中调用 Function1
吗?
我目前的情况是这样的:
keyboard.on_press(Function1)
keyboard.on_press_key(';', Function2)
keyboard.on_press_key('/', Function3)
通过试用我发现 on_press_key() 事件总是先发生(我的程序的逻辑依赖于它)但我不知道为什么,或者它是否是硬件 - 或者OS- 如果在其他系统上使用,可能会出现不一致和损坏的特定内容 (?)。
我试过搜索,但找不到关于此的任何内容。有没有一种可靠的方法可以知道事件的触发顺序,或者强制它们以特定的顺序触发?
查看源码,控制流程如下:
- keyboard.on_press 在存储在全局
_listener
对象中的handlers
对象中添加一个条目。 - keyboard.on_press_key 在
nonblocking_keys
字典中添加一个条目。
当一个键事件被引发时,process
被调用,调用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()
不过这只是一个实现细节,可能会随着新版本的发展而变化,你最好不要依赖它。你可以在 Function2
和 Function3
中调用 Function1
吗?