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-F12。但是,它不能用于检测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,我不会在这里发表问题。 – q0987
不同的终端需要**'TERM' **的不同值(你的问题没有说明你正在使用哪个终端)。 –