#python #keyboard-events
#python #клавиатура-события
Вопрос:
В настоящее время у меня такая ситуация:
keyboard.on_press(Function1)
keyboard.on_press_key(';', Function2)
keyboard.on_press_key('/', Function3)
В ходе пробной версии я обнаружил, что события on_press_key () всегда происходят первыми (и логика моей программы зависит от этого), но я понятия не имею, почему, или если это аппаратная или специфичная для ОС вещь, которая может быть непоследовательной и сломаться при использовании в других системах (?).
Я пробовал искать, но ничего не смог найти по этому поводу. Есть ли надежный способ узнать порядок, в котором запускаются события, или заставить их запускаться в определенном порядке?
Ответ №1:
Глядя на исходный код, поток управления выглядит следующим образом:
- keyboard.on_press добавляет запись в
handlers
объект, хранящийся в глобальном_listener
объекте obj. - keyboard.on_press_key добавляет запись в
nonblocking_keys
dict.
Когда вызывается ключевое событие, process
вызывается, которое вызывает pre_process_event (само вызывающее все обратные вызовы в nonblocking_keys
dict) ПЕРЕД вызовом обработчиков.
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
in Function2
и Function3
?