I'm coding a little tool that displays the key presses on the screen with Tkinter, useful for screen recording.
Is there a way to get a listener for all key presses of the system globally with Tkinter? (for every keystroke including F1, CTRL, ..., even when the Tkinter window does not have the focus)
I currently know a solution with pyHook.HookManager()
, pythoncom.PumpMessages()
, etc. but is there a 100% Tkinter solution?
Indeed, pyhook
is only for Python 2, and pyhook3
seems to be abandoned, so I would prefer a built-in Python3 / Tkinter solution for Windows.
CodePudding user response:
You can try:
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()
CodePudding user response:
As suggested in tkinter using two keys at the same time, you can detect all key pressed at the same time with the following:
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)