Python 2.7
我试图在我使用msvcrt模块中的getch()函数编写的应用程序中捕获按键。有些很容易,输入是13,退格是8,。>有些钥匙,比如Home,我无法解决。
来自getch()的docstring:
"如果按下的键是特殊功能键,则返回'000'或'xe0';下一个电话将返回键码。"
我已经尝试过测试返回值为' 000'或者' xe0'但这不会被退回。发生的事情是我得到224并且在下一次调用getch()时我得到另一个代码,所以对于Home它来说71.其他特殊键也是这样的,End是224 79,Insert是224 82,Page Up是224 73等我无法解释这种行为;我试过看看是否将这两个值加在一起然后取下两个有用的力量(即224 + 73 - 256),但它并没有产生任何有用的东西。
有没有人理解这种行为和/或有没有人对如何捕获这些密钥有任何建议(我不想硬编码224 + x模式值,因为我不相信这些是一致的和其他用户一起)?
谢谢。
编辑: 代码,如果有人想试试
import msvcrt
while True:
key = msvcrt.getch()
print ord(key)
答案 0 :(得分:1)
getch()
返回的上述值不是'xe0'
,而是 '\xe0'
- 请注意反斜杠表示escape sequence。 224
只是该字节的十进制值:
ord('\xe0') == 224
所以在你的情况下,这应该有效:
while True:
key = msvcrt.getch()
if key in ('\000', '\xe0'):
# special key, handle accordingly
# ...