2

如何使用 python 3 检测密钥释放?

就像我按下键a1 秒钟,当我将手指从键上移开(松开键)时,它会print("Key 'a' pressed then released")

我试图用模块来做,keyboard但我不知道如何使用它。我曾经用它来检测按键。
msvcrt模块对我不起作用,但如果msvcrt可以做我想做的,那么你可以回答我。

笔记:

我不想使用Pygame或任何其他module会显示弹出窗口的

4

3 回答 3

4

你可以使用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()
于 2017-08-09T08:10:04.567 回答
4

您可以使用该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使用 key 参数调用指定的函数。您还可以指定一个on_press函数。

编辑:

正如讨论中所要求的,您可以通过falseon_key_release函数返回来停止侦听器。像那样:

def on_key_release(key):
    print('Released Key %s' % key)
    return False
于 2017-08-09T08:14:07.967 回答
0

与 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()
于 2017-08-09T08:20:52.160 回答