使用 Tkinter 捕获系统的所有按键

Capture all keypresses of the system with Tkinter

我正在编写一个小工具,用 Tkinter 在屏幕上显示按键,对屏幕录制很有用。

有没有办法通过 Tkinter 全局 获取系统所有按键的监听器?(对于包括 F1, CTRL, ..., 即使 Tkinter window 没有焦点)

我目前知道 pyHook.HookManager()pythoncom.PumpMessages() 的解决方案以及 的解决方案,但是是否有 100% tkinter 的解决方案?

确实,pyhook is only for Python 2, and pyhook3 似乎被遗弃了,所以我更喜欢 内置 Python3 / Tkinter 解决方案 for Windows。

解决方案一:如果您需要在当前window中捕捉键盘事件,您可以使用:

from tkinter import *
 
def key_press(event):
    key = event.char
    print(f"'{key}' is pressed")
 
root = Tk()
root.geometry('640x480')
root.bind('<Key>', key_press)
mainloop()

解决方案2:如果你想捕获按键而不管哪个window有焦点,你可以使用keyboard

中所建议,您可以使用以下方法检测同时按下的所有键:


history = []
def keyup(e):
    print(e.keycode)
    if  e.keycode in history :
        history.pop(history.index(e.keycode))

        var.set(str(history))

def keydown(e):
    if not e.keycode in history :
        history.append(e.keycode)
        var.set(str(history))

root = Tk()
root.bind("<KeyPress>", keydown)
root.bind("<KeyRelease>", keyup)