使用 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)
我正在编写一个小工具,用 Tkinter 在屏幕上显示按键,对屏幕录制很有用。
有没有办法通过 Tkinter 全局 获取系统所有按键的监听器?(对于包括 F1, CTRL, ..., 即使 Tkinter window 没有焦点)
我目前知道 pyHook.HookManager()
、pythoncom.PumpMessages()
的解决方案以及 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)