在python curses中对getch()使用backspace

2024-04-25 01:31:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望用户能够以getch()的方式输入每个字符。我还启用了echo(),因为我想打印出用户键入的每个字符。不过,我也希望用户能够按backspace键,并将他在点击backspace之前按下的键从屏幕上删除,就像backspace在文本编辑器中的工作方式一样。我该怎么做?我使用的是python3.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()

Tags: 代码text用户importecho键入屏幕方式
1条回答
网友
1楼 · 发布于 2024-04-25 01:31:00

您可以这样做:禁用echo,使用显式库调用来回送字符,而不是通常的“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引用并没有详细介绍^{},但是由于它是一个curses的包装器,所以您可以阅读它的manual page关于解释文本backspace\b使光标向后移动的方式。然后,该示例写入一个空格(删除其中的任何内容),然后将光标移回空白空间。在

相关问题 更多 >