代码之家  ›  专栏  ›  技术社区  ›  Nouman ProfHase85

如何使用python检测按键释放(而不是按键)?

  •  2
  • Nouman ProfHase85  · 技术社区  · 7 年前

    a 当我把手指从钥匙上取下来的时候 (松开钥匙) ,它会 print("Key 'a' pressed then released") .

    我试着用模块来做 keyboard
    msvcrt 模块不适用于我,但如果 msvcrt

    注:

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

    3 回复  |  直到 4 年前
        1
  •  5
  •   Nouman ProfHase85    7 年前

    您可以使用 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()
    
        2
  •  4
  •   dpr    7 年前

    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
    
        3
  •  0
  •   decadenza    7 年前

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