【发布时间】: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