Мне нужно знать, когда нажата и удерживается клавиша (конкретной). В случае использования после обнаружения довольно прост. Когда ключ выпущен, отправьте сигнал, чтобы остановить обратный вызов (который я уже знаю). < /P>
желаемое поведение < /h2>
Вот грубая схема Как выглядит алго: < /p>
Код: Выделить всё
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 и его 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()`
Возможно, сохранив последний известный нажатый нажатый клавиш, и проверив, была ли выпущенная клавиша такая же, как и горячая клавиша, которая была нажата ранее, но я не уверен, как бы я пошел Это и может ли это работать? Ключи удерживаются. Этот ниже код достигает почти того, что я хочу: < /p>
Код: Выделить всё
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)
< /code>
Проблема с этим решением заключается в том, что она не очень хорошо подходит для OSX и Ubuntu. И у него есть некоторые проблемы, работающие со специальными ключами. Более того, у меня есть Hotkey, хранящаяся как pynput.keyboard.key.f7
Окончательный вопрос
Как мне обнаружить ключ, который удерживается. Я бы предпочел достичь этого, используя pynput , поскольку остальная часть базы кода использует его, но 'клавиатура тоже хорошо. > и on_release = ore_callback Это может быть достигнуто, но я не совсем уверен в этом. Наконец, решение предпочтительнее для кросс -платформы (я в порядке с использованием трех разных функций в зависимости от значения платформы. О достижении этого? Это работает почти идеально с всего 1 недостатком. И это то, что он не прислушивается к Keypresess прямо с начала программы. Хорошо, что после того, как он впервые обнаружит клавишу, он работает безупречно.
Чего мне там не хватает?
Подробнее здесь: https://stackoverflow.com/questions/671 ... own-python