【发布时间】:2019-07-05 21:24:20
【问题描述】:
k = stdscr.getch()
if k == curses.KEY_UP:
sys.stdout.write('KEY_UP')
elif k == curses.KEY_F1:
sys.stdout.write('KEY_F1')
elif k == 113:
break
else:
pass
https://docs.python.org/2/library/curses.html
上面的代码可以用来检测'q'和arrow_up。但是,它不能用于检测 F1。
问题>python curses 中有没有一种方法可以用来检测特殊功能键?
[更新]
我的终端类型是 xterm。
elif k == 269: # 'F5'
elif k == 270: # 'F6'
elif k == 271: # 'F7'
elif k == 272: # 'F8'
elif k == 273: # 'F9'
elif k == 27: # 'ESC'
special_keys = [stdscr.getch(), stdscr.getch(), stdscr.getch(), stdscr.getch()]
if special_keys == [91, 49, 49, 126]:
sys.stdout.write('F1\n')
if special_keys == [91, 49, 50, 126]:
sys.stdout.write('F2\n')
if special_keys == [91, 49, 51, 126]:
sys.stdout.write('F3\n')
if special_keys == [91, 49, 52, 126]:
sys.stdout.write('F4\n')
根据@pbuck 的建议,我测试了我的终端并在上面列出了结果。我不确定此解决方案是否可移植。因为@pbuck 只建议我应该在 ESC 之后使用接下来的两个键。就我而言,我必须提取接下来的四个键。
【问题讨论】:
-
如果无法检测到F1等,那是因为
TERM设置错误。 -
@ThomasDickey,那么我应该使用什么正确的术语。如果我知道正确的 TERM,我不会在这里发布问题。
-
不同的终端需要不同的
TERM值(你的问题没有说明你使用的是哪个终端)。
标签: python python-3.x curses