如何捕获Python控制台应用中的特殊键
我在用Python 2.7写一个应用程序,想要捕捉键盘按键,使用的是msvcrt模块里的getch()函数。有些按键比较简单,比如回车键是13,退格键是8,点号是46等等。但有些按键,比如Home键,我就搞不清楚了。
根据getch()的文档说明:
“如果按下的是特殊功能键,它会返回‘000’或‘xe0’;下一次调用会返回具体的键码。”
我试着检测返回值是否为'000'或'xe0',但并没有得到这些值。实际上,我得到的是224,然后在下一次调用getch()时会得到另一个代码,比如Home键返回的是71。其他特殊键也是这样,End键是224 79,Insert键是224 82,Page Up键是224 73等等。我无法解释这种行为;我尝试把这两个值相加再减去一个2的幂(比如224 + 73 - 256),但没有得到有用的结果。
有没有人理解这种行为?或者有没有人能给我一些建议,告诉我怎么捕捉这些键?我不想硬编码224 + x这种模式,因为我不确定这在其他用户那里是否一致。
谢谢。
编辑:如果有人想试试代码
import msvcrt
while True:
key = msvcrt.getch()
print ord(key)
1 个回答
1
这里提到的 getch()
返回的值不是 'xe0'
,而是'\xe0'
- 注意那个反斜杠,它表示这是一个转义序列。224
只是这个字节的十进制值:
ord('\xe0') == 224
所以在你的情况下,这样做应该可以:
while True:
key = msvcrt.getch()
if key in ('\000', '\xe0'):
# special key, handle accordingly
# ...