Luc*_*hez 8 python input keycode
我必须知道按下了什么键,但不需要字符的代码,我想知道当有人按下'A'键时,即使获得的键是'a'或'A',所以其他键都是如此.
我不能使用PyGame或任何其他库(包括Tkinter).只有Python标准库.这必须在终端中完成,而不是图形界面.
不需要字符代码.我需要知道关键代码.
例如:
ord('a') != ord('A') # 97 != 65
someFunction('a') == someFunction('A') # a_code == A_code
Run Code Online (Sandbox Code Playgroud)
myr*_*lav 21
见tty标准模块.它允许使用tty.setcbreak(sys.stdin)从默认的面向行(煮熟)模式切换到面向字符(cbreak)模式.从sys.stdin中读取单个字符将导致下一个按下的键盘键(如果它生成代码):
import sys
import tty
tty.setcbreak(sys.stdin)
while True:
print ord(sys.stdin.read(1))
Run Code Online (Sandbox Code Playgroud)
注意:解决方案仅限于Unix(包括Linux).
编辑:在Windows上尝试msvcrt.getche()/getwche()./我无处可去......
编辑2:通过ctypes.windll使用win32低级控制台API (参见SO中的示例)和ReadConsoleInput函数.你应该过滤掉按键 - e.EventType==KEY_EVENT并寻找e.Event.KeyEvent.wVirtualKeyCode价值.可以在http://www.benryves.com/tutorials/?t=winconsole&c=4上找到应用程序示例(不是在Python中,只是为了获得一个想法).
看一下Python 中的pynput模块。它还有一个很好的教程,您可以使用它轻松地为代码创建键盘侦听器。
官方给听众的例子是:
from pynput.keyboard import Key, Listener
def on_press(key):
print('{0} pressed'.format(
key))
def on_release(key):
print('{0} release'.format(
key))
if key == Key.esc:
# Stop listener
return False
# Collect events until released
with Listener(on_press=on_press,
on_release=on_release) as listener:
listener.join()
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
28764 次 |
| 最近记录: |