简单的Python按键检测

时间:2018-07-09 22:12:02

标签: python

我正在寻找一种简单的方法来检测循环中的按键,而无需导入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()是我理想的解决方案,但我也完全欢迎其他同样简单的解决方案。

2 个答案:

答案 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)

我仍然认为我没有完美地处理它,但这解决了所有问题。