Правила для определения порядка событий клавиатуры? (Python)

#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 ?