forked from HansZ8/RoboJuDo
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkeyboard.py
More file actions
54 lines (44 loc) · 1.49 KB
/
keyboard.py
File metadata and controls
54 lines (44 loc) · 1.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import time
from queue import Queue
from threading import Thread
from pynput import keyboard # TODO: fix DISPLAY error on Linux without GUI
class KeyboardThread(Thread):
def __init__(self, event_queue: Queue):
super().__init__(name="KeyboardThread", daemon=True)
self.event_queue = event_queue
def run(self):
def on_press(key):
key_name = self.get_key_name(key)
event = {
"type": "keyboard",
"name": key_name,
"pressed": True,
"timestamp": time.time(),
}
self.event_queue.put(event)
def on_release(key):
key_name = self.get_key_name(key)
event = {
"type": "keyboard",
"name": key_name,
"pressed": False,
"timestamp": time.time(),
}
self.event_queue.put(event)
with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
def get_key_name(self, key):
try:
return key.char if key.char is not None else str(key)
except AttributeError:
return str(key)
if __name__ == "__main__":
event_queue = Queue()
kb_thread = KeyboardThread(event_queue)
kb_thread.start()
print("Press keys (ESC to exit)...")
while True:
event = event_queue.get()
print(event)
if event["name"] == "Key.esc" and event["pressed"]:
break