首页 > 解决方案 > python中getch的箭头键

问题描述

我想在 python linux 中捕获箭头键:

   import getch as gh
   ch = ''
   while ch != 'q':
       print(ch)
       ch = gh.getch()
       k = ord(ch)
       print(k)
       # my question is:
       if k or ch = ???
          print("up")

当我运行上面的代码并按箭头键时,我得到以下字符,它们是什么以及如何匹配一个?

27

1
[
66
B
27

1
[
67
C
27

1
[
65
A

标签: pythonlinuxarrow-keysgetch

解决方案


它们是ANSI 转义序列

当我们在终端中执行以下代码时:

import getch as gh

ch = ''
while ch != 'q':
    ch = gh.getch()
    print(ord(ch))

当我们向上箭头时,它会打印以下内容↑</kbd> key once:

27
91
65

参考ASCII表,我们可以看到它对应ESC[A。它是ANSI 转义序列中“ Cursor UP ”的代码。CSI的顺序是ESC [,所以ESC[A== CSI A==CSI 1 A表示“将光标向上移动一个单元格。”)

同样,我们也可以找出其他方向键。


如果您想使用getch 模块匹配箭头键,您可以尝试以下代码(get_key下面的函数最初来自此答案):

import getch as gh


# The function below is originally from: https://stackoverflow.com/a/47378376/8581025
def get_key():
    first_char = gh.getch()
    if first_char == '\x1b':
        return {'[A': 'up', '[B': 'down', '[C': 'right', '[D': 'left'}[gh.getch() + gh.getch()]
    else:
        return first_char


key = ''
while key != 'q':
    key = get_key()
    print(key)

当我们按下时会打印以下内容↑</kbd> ↓</kbd> ←</kbd> →</kbd> q

up
down
left
right
q

推荐阅读