我正在尝试找到本地系统在Python中分配给箭头键的值,我正在使用以下脚本进行此操作:
import sys,tty,termios
class _Getch:
def __call__(self):
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
def get():
inkey = _Getch()
while(1):
k=inkey()
if k!='':break
print 'you pressed', ord(k)
def main():
for i in range(0,25):
get()
if __name__=='__main__':
main()
然后我运行了这个脚本,按了上下左右箭头,得到了以下输出:
$ python getchar.py
you pressed 27
you pressed 91
you pressed 65
you pressed 27
you pressed 91
you pressed 66
you pressed 27
you pressed 91
you pressed 67
you pressed 27
you pressed 91
you pressed 68
这是异常的,因为它表明箭头键在我的系统上被注册为某种三元组(27-91-6x),因为每次按下箭头键都会占用三个get()实例。相比之下,按a、b、c和CTRL-C键则会产生:
you pressed 97
you pressed 98
you pressed 99
you pressed 3
有人可以解释一下为什么我的箭头键的值似乎被存储为三元组吗?为什么会这样?这在所有平台上都是一样的吗?(我正在使用Debian Linux。)如果不是,那么我应该如何存储箭头键的值呢?
最终目标是编写一个程序,需要正确识别箭头键并根据按下的箭头键执行相应的操作。
__call__
方法的_Getch
类,而不是只有一个getch
函数? - user2357112__call__
方法转换为顶级getch
函数,移除self
参数,并调用getch()
而不是创建inkey
实例并调用inkey()
。即使您需要将其作为对象传递,也可以直接使用getch
函数进行操作。 - user2357112