curses getch () возвращает разные значения для главного окна и площадок в python

Метод getch() возвращает разные значения для главного окна и дополняет, если нажатая клавиша не является ASCII. Например, нажимая клавиши со стрелками, я получаю ожидаемые KEY_UP, KEY_DOWN и т. Д. В главном окне, но на панели я получаю 65 для стрелки вверх и 66 для стрелки вниз. Почему это так, и есть ли способ получить более 255 значений для специальных клавиш в пэде?

Я использую Python 2.6.5.

Следующий код демонстрирует проблему:

import curses

def main(stdscr):
    c = None
    while c != curses.KEY_RIGHT:
        c = stdscr.getch()
        stdscr.addstr(0, 0, "%3d" % c)
        stdscr.refresh()
    pad = curses.newpad(20, 20)
    while True:
        c = pad.getch()
        pad.addstr(0, 0, "%3d" % c)
        pad.refresh(0, 0, 1, 0, 20, 20)

if __name__ == '__main__':
    curses.wrapper(main)

person Bjorn    schedule 06.10.2012    source источник


Ответы (2)


Вы пробовали pad.keypad(1)

Это первый раз, когда мне нужно иметь дело с проклятиями в Python, и сегодня утром у меня была такая же проблема.

person Matthew    schedule 08.07.2013
comment
Да, установка window.keypad(1) гарантирует, что curses интерпретирует escape-последовательности за вас. docs.python.org/3.4/library/curses.html# curses.window.keypad - person Chiel ten Brinke; 18.03.2014
comment
Есть ли способ автоматически установить это для всех окон? - person augurar; 02.12.2014

У меня нет прямого ответа на ваш вопрос, но я заметил, что 65 и 66 - это значения ASCII для «A» и «B», которые являются командами CSI или SS3, используемыми стрелками вверх и вниз.

person LeoNerd    schedule 10.10.2012
comment
Спасибо @LeoNerd, это помогает мне продолжить расследование. Я не был знаком с терминами CSI и SS3, но обнаружил, что CSI - это ESC, за которым следует левая скобка ([) в 7-битном соединении или десятичное число 155 в 8-битном соединении, а SS3 - это ESC, за которым следует O (заглавная буква O ) на 7-битном соединении и десятичное 143 на 8-битном соединении. Я бы щелкнул "Этот ответ полезен, но у меня недостаточно репутации". - person Bjorn; 10.10.2012