Как обнаружить проклятия комбинаций клавиш ALT + в python

Новичок в python здесь и использование импорта curses. Я хочу обнаруживать комбинации клавиш, такие как ALT+F и подобные. В настоящее время я использую getch() для получения ключа, а затем печатаю его в окне curses. Значение не меняется для F или ALT+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)

person wufoo    schedule 12.03.2014    source источник


Ответы (1)


Попробуй это:

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)
person Wojciech Walczak    schedule 12.03.2014
comment
ОП, ^ это лучший метод, который я видел. В противном случае вам может не понравиться то, что они говорят, но проверьте заголовок stackoverflow.com/questions/9750588/ Удачи! - person wbt11a; 13.03.2014
comment
Возможно, getch() не является правильным вызовом функции. Я помню, что он был довольно ограничен для некоторых вещей на языке C. Возможно, лучше было бы задать вопрос о том, как читать необработанные коды сканирования... Кроме того, похоже, что вставленный пример не работает. Хм... - person wufoo; 13.03.2014
comment
На самом деле код отлично работает. Моя ошибка. Я ожидал, что он напечатает все клавиши, а не только комбинации ALT+. Спасибо! - person wufoo; 13.03.2014
comment
Обновление: через некоторое время после использования этого кода я заметил, что нажатие клавиши [ESC] приводит к задержке в 1 секунду. Мне нужно было вызвать os.environ['ESCDELAY'] = 25 до входа в curses.wrapper. - person wufoo; 26.03.2014