Обнаружение, если клавиша удерживается нажатой – pythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Обнаружение, если клавиша удерживается нажатой – python

Сообщение Anonymous »

Мой пример использования
Мне нужно знать, когда (конкретная) клавиша нажата и удерживается. Вариант использования после обнаружения довольно прост. Когда клавиша будет отпущена, отправьте сигнал об остановке обратного вызова (который я уже знаю).
Желаемое поведение
Вот примерная схема как выглядит алгоритм:

Код: Выделить всё

def the_callback():
if key_held == the_hotkey:
someObj.start()  # this class Obj works totally well so no issues here on
elif key_released == the_hotkey:
someObj.stop()
else:
# we don't care. continue looking for Keyboard events

# here any kinda listener or just a loop which passes events to the callback
Я должен упомянуть, что любой прослушиватель, который блокирует выполнение, в порядке, поскольку он будет работать в своем собственном потоке (уже запущенный pynput.keyboard.Listener в потоке, поэтому не проблема)
Что я пробовал
Я использовал pynput и его pynput.keyboard.Listener для обнаружения ключа -нажимает и вызывает обратные вызовы соответственно, но я не смог заставить эту работу определять, когда клавиша удерживается нажатой.
текущее решение выглядит примерно так:

Код: Выделить всё

# not real code. just rough scheme
def on_pressed(key):
if key == my_hotkey:
if running_already:  # this part works well already
obj.stop()
else:
obj.start()
else:
# we don't care

with pynput.keyboard.Listener(on_press=on_pressed) as listener:
listener.join()  # blocking call until SystemExit, `return False` from callback or `listener.stop()`

У меня очень сильное ощущение, что я смогу добиться этой цели, добавив on_release=another_callback_that_handles_releases (доступно в pynput.keyboard.listener).
Возможно, сохраняя последнее известное нажатие клавиши и проверяя, была ли отпущенная клавиша той же, что и горячая клавиша, которая была нажата ранее, но я не уверен, как бы мне это сделать. это и может ли это вообще работать?
Затем я решил попробовать клавиатуру (другие библиотеки).
Я написал приведенный ниже код для того же самого, который может обнаружить клавиши удерживаются нажатыми. Этот код ниже почти дает то, что я хочу:

Код: Выделить всё

import keyboard as kb, time

while 1:
while kb.is_pressed('q'):
print('Key is held')
time.sleep(0.5)  # sleep added just to stop it from spamming the stdout

else:
print('No it\'s Not')
time.sleep(0.5)
Проблема этого решения в том, что оно не очень хорошо подходит для OSX и Ubuntu. И у него есть некоторые проблемы с работой со специальными клавишами. Более того, у меня есть горячая клавиша, хранящаяся как pynput.keyboard.Key.f7 (например) или pynput.keyboard.KeyCode(char='s') # для символьных клавиш, и эти перечисления имеют разные значения. чем то, что клавиатура использует для сканирования идентификаторов клавиш (с помощью Keyboard.hook()).
Последний вопрос
Как мне определить, что клавиша удерживается нажатой. Я бы предпочел добиться этого с помощью pynput, поскольку остальная часть базы кода использует его, но 'keyboard тоже подойдет.
Опять же, у меня такое ощущение, что использование on_press=a_callback и on_release=another_callback этого можно достичь, но я не совсем в этом уверен. Наконец, предпочтительно, чтобы решение было кроссплатформенным (я согласен использовать три разные функции в зависимости от значения Platform.system()).
Как бы вы поступили о достижении этого?
EDIT-1
ЗДЕСЬ я написал как попытку (и MCVE) по предложению Исака. Это работает почти идеально с всего 1 недостатком. И дело в том, что он не слушает нажатия клавиш с самого запуска программы.
По какой-то неизвестной причине требуется некоторое время, прежде чем он действительно начнет обнаруживать любое нажатие клавиши. Хорошо, что как только он впервые обнаруживает нажатие клавиши, он работает безупречно.
Что мне там не хватает?

Подробнее здесь: https://stackoverflow.com/questions/671 ... own-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Обнаружение, если клавиша удерживается нажатой – python
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Обнаружение, удерживается ли ключ - Python
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Почему клавиша в реальном времени не нажимает на обнаружение работы в CLI Windows PHP, не нажимая клавишу «Enter»? [дубл
    Anonymous » » в форуме Php
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • PYTHON Выполнять код все время, пока удерживается правая кнопка мыши.
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Unity не обнаруживает щелчок мыши, когда удерживается другая кнопка
    Anonymous » » в форуме C#
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»