【问题标题】:Python Curses Backspace detection works in main window but not in subwindowsPython Curses Backspace 检测在主窗口中有效,但在子窗口中无效
【发布时间】:2018-08-19 22:34:05
【问题描述】:

我编写了这个函数,它接受用户输入指定屏幕的指定长度:

def get_str(scr, max_len):

    curses.echo()
    curses.curs_set(2)

    usr_in = ''
    cur_len = 1;
    tmp = scr.getkey()   

    while(tmp != '\n' and cur_len < max_len):
        if tmp == 'KEY_BACKSPACE' and cur_len > 1:
            cur_len -= 1                
            usr_in = usr_in[:-1]
            curs_pos = scr.getyx()
            scr.addstr(curs_pos[0], curs_pos[1], " ")
            scr.move(curs_pos[0], curs_pos[1])
        else:
            usr_in += tmp
            cur_len += 1
        tmp = scr.getkey()

    if(cur_len == max_len):
        usr_in += tmp

    curses.noecho()
    curses.curs_set(0)

    return usr_in 

我正在使用 curses.wrapper 和一个设置所有窗口的主函数。当我在包装器给出的主窗口中调用 get_str 时,该函数按预期工作。按退格键将最后一个字符从屏幕上移开并向后移动光标。但是,当我在主窗口的子窗口中调用它时,'^?'显示并且不会触发 if tmp == 'KEY_BACKSPACE' 语句。这就是我设置子窗口的方式:`

def main(stdscr):

    lines = curses.LINES - 1
    cols = curses.COLS - 1

    board = stdscr.subwin(curses.LINES, int(3*(curses.COLS/5)), 0, int(curses.COLS/5) + 1)
    board.border()`

【问题讨论】:

    标签: python python-3.x terminal curses python-curses


    【解决方案1】:

    子窗口不继承keypad 设置。创建窗口时,如果您想读取发送“任何”命名 KEY_ 符号的键,则必须进行设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多