Python curses - 隐藏用户输入

时间:2012-06-13 22:32:42

标签: python curses

我正在开发python curses中的一个应用程序。我使用getch()方法来获取按键。 但我可以在屏幕上看到按键。我可以随时移动光标,但在光标后我可以看到用户输入的内容。

当然,我可以在每按一次键后擦除并重绘整个屏幕,但它会闪烁 - 这就是分辨。

知道如何摆脱这些按键吗?谢谢

2 个答案:

答案 0 :(得分:4)

以下列方式初始化curses类,它将解决问题。

class curses_screen:
    def __enter__(self):
        self.stdscr = curses.initscr()
        curses.cbreak()
        curses.noecho()
        self.stdscr.keypad(1)
        SCREEN_HEIGHT, SCREEN_WIDTH = self.stdscr.getmaxyx()
        return self.stdscr
    def __exit__(self,a,b,c):
        curses.nocbreak()
        self.stdscr.keypad(0)
        curses.echo()
        curses.endwin()

with curses_screen() as stdscr:
    """
    Execution code plush getch code here
    """

答案 1 :(得分:1)

Python标准库中有一个模块可以自动执行此操作,请尝试:

def new(y):
    import getpass
    x = getpass.getpass(y)
    return x

如果你不想使用getpass,我只是遇到了类似的问题。你可以使用我最近完成的这个功能:

def passw(n, prompt = 'Password> '):
       import msvcrt
       import sys
       write = sys.stdout.write

       for x in prompt:
           msvcrt.putch(x)
       passw = ""

       while 1:
           x = msvcrt.getch()
           if x == '\r' or x == '\n':
               break
           if x == '\b':
               if passw == "":
                      pass
               else:
                      write("\x08 \x08")
                      passw = passw[:-1]
           else:
               write(n)
               passw = passw + x
       return passw
       msvcrt.putch('\r')
       msvcrt.putch('\n')

你可以将任何单个字符或数字作为n放置,这就是它在屏幕上返回的内容,例如:passw('*')表示星号,passw(“”表示no-echo。