我现在正在学习python,我试图获得键盘输入,而不需要用getch()
和ord()
按下回车键来处理(至少对我来说(从getch()
返回的胡言乱语。
在我的理解中,getch()
返回一个字节流,而ord确实将该字节数据转换为unicode。如果我没有错的话,还有一些键,比如箭头键(这是我的意图,构建一个cmd"ui"来导航(,它们被分成不同的unicode值。
到目前为止,在尝试了自己并搜索了网络后,我想出了一个灵魂,由互联网上的一个人提供(信息只是为了不声称别人的代码是我的(
import msvcrt
while True:
key = ord(msvcrt.getch())
if key == 27: #ESC
break
elif key == 13: #Enter
print("select")
elif key == 224: #thing i do not understand
key = ord(msvcrt.getch()) #thing i do not understand
if key == 80: #Down arrow
print("moveDown")
elif key == 72: #Up arrow
print("moveUp")
elif key == 77: #Right arrow
print("moveRight")
elif key == 75: #Left arrow
print("moveLeft")
这很好,但我不明白的是,为什么有必要进行第二个变量赋值。在我的理解中,getch()
应该立即返回值,所以我不明白第二个key = ord...
语句从哪里获得数据来将其分配给键变量。
我希望你能解释一下。
来自msvcrt.getch
:的文档
msvcrtgetch((
读取按键并将结果字符作为字节字符串返回。控制台没有任何响应。如果按键,此呼叫将被阻止尚未可用,但不会等待按下Enter键。如果按下的键是特殊功能键,则会返回
' 00'
或CCD_ 9;下一个调用将返回密钥代码Control-C
按键无法使用此函数读取。
因此,如果按下了特殊功能键(例如箭头键(,我们必须测试0xE0
(224(,然后读取下一个值。