我正在寻找一种简单的方法来检测循环中的按键,而无需导入pygame之类的东西,
pressed('a') #returns True if key 'a' pressed, False otherwise
我知道这个Keypress detection线程,但是不幸的是,当我运行推荐的代码或使用keyboard.is_pressed()尝试任何操作时,我得到了
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Users\myname\AppData\Local\Programs\Python\Python37\lib\threading.py", line 917, in _bootstrap_inner
self.run()
File "C:\Users\myname\AppData\Local\Programs\Python\Python37\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\myname\AppData\Roaming\Python\Python37\site-packages\keyboard\__init__.py", line 292, in listen
_os_keyboard.listen(self.direct_callback)
File "C:\Users\myname\AppData\Roaming\Python\Python37\site-packages\keyboard\_winkeyboard.py", line 560, in listen
prepare_intercept(callback)
File "C:\Users\myname\AppData\Roaming\Python\Python37\site-packages\keyboard\_winkeyboard.py", line 553, in prepare_intercept
keyboard_hook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboard_callback, GetModuleHandleW(NULL), NULL)
ctypes.ArgumentError: argument 3: <class 'OverflowError'>: int too long to convert
(Python的新手,所以不确定上面的任何含义)
keyboard.is_pressed()是我理想的解决方案,但我也完全欢迎其他同样简单的解决方案。
答案 0 :(得分:0)
这是github上python 3.7的一个未解决问题。我刚刚使用Python 3.6.4(anaconda 64位)和keyboard-0.13.2测试了您的链接中给出的代码,它可以按预期工作。实际上,Python 3.7刚刚问世,所以肯定会有一些错误。
答案 1 :(得分:0)
我只是想指出这个线程。 Detect key press in python?
我自己还是个新手,发现使用 keyboard.is_pressed() 检测按键的简单循环会导致问题(未中断时)。
更糟糕的是,当复杂性增加时,所有键盘功能都会被它延迟。我还遇到了其他问题。
该线程中的第三个答案指出了 keyboard.wait() 函数。我发现这是我最喜欢的处理简单按键的方式。
示例
import keyboard
import time
while True:
keyboard.wait("a")
keyboard.press_and_release("z")
time.sleep(0.3)
我仍然认为我没有完美地处理它,但这解决了所有问题。