在 python curses 中对 getch() 使用退格键
Using backspace with getch() in python curses
我希望用户能够输入每个字符,就像 getch() 的工作方式一样。我还打开了 echo(),因为我想打印出用户键入的每个字符。但是,我也希望用户能够按下退格键,并让他在按下退格键之前按下的键从屏幕上删除,就像退格键在文本编辑器中的工作方式一样。我怎样才能做到这一点?我正在使用 python 3.6 和 curses 库(很明显)。如果您想到目前为止看到我的代码,这里是:
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()
您可以这样做:禁用回显,使用显式库调用来回显 "backspace" 通常选择以外的字符:
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()
Python curses 参考没有详细介绍 addch
, but since it is a wrapper around curses, you can read its manual page 文字返回的方式space \b
被解释为使光标向后移动。该示例然后写入一个 space(擦除那里的任何内容),然后将光标移回空的 space.
我希望用户能够输入每个字符,就像 getch() 的工作方式一样。我还打开了 echo(),因为我想打印出用户键入的每个字符。但是,我也希望用户能够按下退格键,并让他在按下退格键之前按下的键从屏幕上删除,就像退格键在文本编辑器中的工作方式一样。我怎样才能做到这一点?我正在使用 python 3.6 和 curses 库(很明显)。如果您想到目前为止看到我的代码,这里是:
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()
您可以这样做:禁用回显,使用显式库调用来回显 "backspace" 通常选择以外的字符:
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()
Python curses 参考没有详细介绍 addch
, but since it is a wrapper around curses, you can read its manual page 文字返回的方式space \b
被解释为使光标向后移动。该示例然后写入一个 space(擦除那里的任何内容),然后将光标移回空的 space.