【问题标题】:How to detect key release with python ( not keypress)?如何用python(不是按键)检测按键释放?
【发布时间】:2018-01-17 00:06:27
【问题描述】:

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

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

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

注意:

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

【问题讨论】:

标签: python python-3.x msvcrt keyrelease


【解决方案1】:

您可以使用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的文档,键盘侦听器是一个线程,它使用key参数调用on_release上指定的函数。您还可以指定on_press 函数。

编辑:

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

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

【讨论】:

  • 这很好,但请让它更容易理解。
【解决方案2】:

您可以使用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()

【讨论】:

  • 再次阅读我的评论。
  • 哦,它可以不弹出以其他方式我想我知道这种方式也许其他人知道其他方式......
【解决方案3】:

与 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2014-10-07
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    相关资源
    最近更新 更多