我找到了各种方法来检测任何按键,从诅咒点击到创建一个函数来做到这一点(也就是msvcrt但这有点必须在Linux上工作),但我总是遇到同样的问题:无论哪个箭头键我按下,所有这些函数返回b'\xe0'
。我在cmd和powershell中尝试过,结果相同。我正在运行Win7 Pro 64位。
修改:抱歉,我使用了this代码并尝试了msvcrt.getch()
和click.getchar()
答案 0 :(得分:1)
我发现箭头键由两个字符代表,所以我修改了this solution,这样如果放入第一个字符,它会读取第二个(和第三个,wtf Linux?)然后将它们转换为与平台无关的字符串。
# Find the right getch() and getKey() implementations
try:
# POSIX system: Create and return a getch that manipulates the tty
import termios
import sys, tty
def getch():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(fd)
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
# Read arrow keys correctly
def getKey():
firstChar = getch()
if firstChar == '\x1b':
return {"[A": "up", "[B": "down", "[C": "right", "[D": "left"}[getch() + getch()]
else:
return firstChar
except ImportError:
# Non-POSIX: Return msvcrt's (Windows') getch
from msvcrt import getch
# Read arrow keys correctly
def getKey():
firstChar = getch()
if firstChar == b'\xe0':
return {"H": "up", "P": "down", "M": "right", "K": "left"}[getch()]
else:
return firstChar