如何在Python中检测curses ALT +键组合

8

我是一个新手,正在学习Python并使用curses库。我想要检测类似于ALT+F这样的键盘组合。目前,我正在使用getch()方法接收按键输入,并在curses窗口中打印出来。但是,对于FALT+F等按键组合,其值没有发生变化。我该如何检测ALT键的组合呢?

import curses

def Main(screen):
   foo = 0
   while foo == 0: 
      ch = screen.getch()
      screen.addstr (5, 5, str(ch), curses.A_REVERSE)
      screen.refresh()
      if ch == ord('q'):
         foo = 1

curses.wrapper(Main)
1个回答

6

试试这个:

import curses

def Main(screen):
   while True:
      ch = screen.getch()
      if ch == ord('q'):
         break
      elif ch == 27: # ALT was pressed
         screen.nodelay(True)
         ch2 = screen.getch() # get the key pressed after ALT
         if ch2 == -1:
            break
         else:
            screen.addstr(5, 5, 'ALT+'+str(ch2))
            screen.refresh()
         screen.nodelay(False)

curses.wrapper(Main)

2
OP,^ 这是我见过的最好的方法。否则,你可能不喜欢他们说什么,但是请查看 https://dev59.com/xmkw5IYBdhLWcg3woMFD 祝你好运! - wbt11a
也许getch()不是正确的函数调用。我记得在C语言中它对某些事情非常有限。也许一个更好的问题是如何读取原始扫描码...另外,这个例子似乎无法粘贴使用。嗯... - wufoo
实际上,将代码粘贴进去后它可以正常工作。是我的错误,我本来期望它打印出所有的键,而不仅仅是ALT+组合键。谢谢! - wufoo
1
更新:使用此代码后一段时间,我注意到按下[ESC]键会生成1秒的延迟。在进入curses.wrapper之前,我需要调用os.environ ['ESCDELAY'] =“25”。 - wufoo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接