如何捕获Python控制台应用中的特殊键

0 投票
1 回答
1324 浏览
提问于 2025-04-18 18:37

我在用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
        # ...

撰写回答