我希望用户能够使用getch()的工作方式输入每个字符。我还启用了echo(),因为我想打印出用户键入的每个字符。但是,我还希望用户能够敲击退格键,并拥有击打退格键之前按下的键以将其从屏幕上删除,就像退格键在文本编辑器中的工作方式一样。我怎样才能做到这一点?我正在使用带有curses lib的python 3.6(很明显)。如果您想到目前为止看到我的代码,这里是:
import curses
# ----- INIT -----
stdscr = curses.initscr()
curses.cbreak()
stdscr.keypad(1)
# ----- PRINT -----
text = "Hello world"
stdscr.addstr(1, 0, text + "\n")
stdscr.refresh()
# ----- MAIN LOOP ------
while 1:
c = stdscr.getch()
if c == ord('q'):
break
# ----- RESET TERMINAL -----
curses.echo()
curses.nocbreak()
stdscr.keypad(1)
curses.endwin()
答案 0 :(得分:2)
您可以执行以下操作:禁用回显,使用显式的库调用来回显除“退格”的通常选择以外的字符:
import curses # ----- INIT ----- stdscr = curses.initscr() curses.cbreak() curses.noecho() stdscr.keypad(1) # ----- PRINT ----- text = "Hello world" stdscr.addstr(1, 0, text + "\n") stdscr.refresh() # ----- MAIN LOOP ------ while 1: c = stdscr.getch() if c == ord('q'): break if c == 8 or c == 127 or c == curses.KEY_BACKSPACE: stdscr.addstr("\b \b") else: stdscr.addch(c) # ----- RESET TERMINAL ----- curses.echo() curses.nocbreak() stdscr.keypad(1) curses.endwin()
关于addch
的Python curses参考文献没有涉及太多细节,但是由于它是curses的包装,因此您可以阅读其manual page来了解文字退格 {{1 }} 被解释为使光标向后移动。然后,该示例写入一个空格(擦除其中的任何内容),然后将光标移回空白空间。