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

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

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

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

Замечания:

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

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

Ты можешь использовать 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()

Подобно ответу 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()
Другие вопросы по тегам