首页 > 解决方案 > 简单的 Python 按键检测

问题描述

我正在寻找一种简单的方法来检测循环内的按键,而无需导入 pygame 之类的东西,类似于

pressed('a') #returns True if key 'a' pressed, False otherwise

我知道这个按键检测线程,但不幸的是,当我运行推荐的代码或使用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() 是我理想的解决方案,但我也对其他同样简单的解决方案完全开放。

标签: python

解决方案


这是github上 python 3.7 的一个未解决问题。我刚刚使用 Python 3.6.4(anaconda 64 位)和键盘 0.13.2 测试了您链接中给出的代码,它按预期工作。Python 3.7 刚刚问世,所以肯定会有一些错误。


推荐阅读