2012-06-13 34 views
2

我正在python curses中開發一個應用程序。我正在使用getch()方法來獲取按下的鍵。 但我可以在屏幕上看到按下的按鍵。我可以隨時移動光標,但在光標後我可以看到用戶輸入的內容。Python curses - 隱藏用戶輸入

當然,我可以在每按下一個按鍵後擦除並重新繪製整個屏幕,但是它閃爍 - 這就是分解。

任何想法如何擺脫這些按下的鍵?謝謝

+0

可能重複的[我可以得到控制檯輸入沒有在Python回聲?](http://stackoverflow.com/questions/4616813/can-i-get-console-input-without-echo-in-python) –

+0

我正在使用curses。不是標準的終端輸入。 – Blaskovic

+0

啊,我明白了。但是,'getpass'中使用的技術也可能對您的情況有所幫助。我認爲這值得一看。 –

回答

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 
    """ 
+0

是的,cbreak()和noecho()是我想要的;)謝謝 – Blaskovic

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(「*」)爲星號或密碼(「」)爲無回聲。