Как определить выпуск клавиши с помощью python (не нажатие клавиши)?

Как я могу обнаружить выпуск ключа с помощью python 3?

Например, если я нажму клавишу a на 1 секунду, когда я уберу палец с клавиши (отпустив клавишу), будет print("Key 'a' pressed then released").

Я пытаюсь сделать это с помощью модуля keyboard, но у меня нет идея о том, как использовать его для этого. Раньше я определял нажатие клавиш с его помощью.
Модуль msvcrt у меня не работает, но если msvcrt может делать то, что я хочу, то вы можете мне ответить.

Примечание:

Я не хочу использовать Pygame или любой другой module, который будет отображать всплывающие окна


person Black Thunder    schedule 09.08.2017    source источник
comment
это?. Вы можете пройти немного по ссылке, которую вы предоставили   -  person Ma0    schedule 09.08.2017
comment
Ваш модуль буквально содержит один пример, который делает то, что вы просите: github.com/ boppreh/keyboard/blob/master/examples/   -  person BoboDarph    schedule 09.08.2017


Ответы (3)


Вы можете использовать модуль pynput:

from pynput import keyboard

def on_key_release(key):
    print('Released Key %s' % key)

with keyboard.Listener(on_release = on_key_release) as listener:
    listener.join()

Согласно документации pynput прослушиватель клавиатуры — это поток, который вызывает функцию, указанную в on_release, с ключевым аргументом. Вы также можете указать функцию on_press.

Изменить:

Как было сказано в обсуждениях, вы можете остановить прослушиватель, вернув false из функции on_key_release. Как это:

def on_key_release(key):
    print('Released Key %s' % key)
    return False
person Franz Forstmayr    schedule 09.08.2017
comment
Это хорошо, но пожалуйста, сделайте это более понятным. - person Black Thunder; 09.08.2017

Вы можете использовать tkinter для этого:

from tkinter import *
def keyup(e):
    print('up', e.char)
def keydown(e):
    print('down', e.char)

root = Tk()
frame = Frame(root, width=100, height=100)
frame.bind("<KeyPress>", keydown)
frame.bind("<KeyRelease>", keyup)
frame.pack()
frame.focus_set()
root.mainloop()
person Acafed    schedule 09.08.2017
comment
Прочитайте мой комментарий еще раз. - person Black Thunder; 09.08.2017
comment
о, это может быть без всплывающих окон по-другому, я думаю, я знаю так, может быть, кто-то еще знает по-другому... - person Acafed; 09.08.2017

Подобно ответу Acafed, используя tkinter и предполагая, что вы используете python3, вы можете легко сделать это следующим образом:

from tkinter import Tk,Frame #importing only necessary stuff.

def keyrelease(e):
    print('The key was released: ', repr(e.char))

root = Tk()
f = Frame(root, width=100, height=100)
f.bind("<KeyRelease>", keyrelease)
f.pack()
root.mainloop()
person decadenza    schedule 09.08.2017