【发布时间】:2014-08-26 18:30:47
【问题描述】:
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)
【问题讨论】:
-
不是
'xe0',而是'\xe0'(注意反斜杠表示escape sequence)。224只是那个字节的十进制值:ord('\xe0') == 224 -
太好了,谢谢。我不确定我是否只是愚蠢,或者是否应该在文档中明确说明?
-
嗯,它是在 docs 中,包括反斜杠 - 不知道你在说什么。
-
是的,你是对的。我的 ide 没有显示反斜杠。