您的代码有问题。
您的清单是:
mouse_events = []
keyboard_events = []
但你正在使用events.append
而不是列表名称。看来您忘记修改代码了。
抛出错误是因为模块keyboard
uses dict
for hook
与模块不同mouse
你不能使用list
作为钥匙。
您可以使用以下方法解决此问题lambda
:
keyboard.hook(lambda _: keyboard_events.append(_))
有更简单的方法可以做到这一点不使用hook
但它仅适用于模块keyboard
Use start_recording()
and stop_recording()
1) start_recording()
启用键盘事件的记录。它不需要回调,您可以一次记录一次。
2) stop_recording()
停止已开始的录音。它返回记录事件的列表。
mouse
module doesn't have stop
/start_recording
So your final code will look like this:
import mouse
import keyboard
mouse_events = []
mouse.hook(mouse_events.append)
keyboard.start_recording() #Starting the recording
keyboard.wait("a")
mouse.unhook(mouse_events.append)
keyboard_events = keyboard.stop_recording() #Stopping the recording. Returns list of events
一起玩活动:
同时进行这两个事件的唯一方法是使用threading https://realpython.com/intro-to-python-threading/
这是您的代码的示例:
import threading
import mouse
import keyboard
mouse_events = []
mouse.hook(mouse_events.append)
keyboard.start_recording()
keyboard.wait("a")
mouse.unhook(mouse_events.append)
keyboard_events = keyboard.stop_recording()
#Keyboard threadings:
k_thread = threading.Thread(target = lambda :keyboard.play(keyboard_events))
k_thread.start()
#Mouse threadings:
m_thread = threading.Thread(target = lambda :mouse.play(mouse_events))
m_thread.start()
#waiting for both threadings to be completed
k_thread.join()
m_thread.join()