2012-06-13 2 views
2

Я разрабатываю одно приложение в проклятиях python. Я использую метод getch() для нажатия клавиш. Но я вижу нажатые клавиши на экране. Я могу перемещать курсор всякий раз, когда хочу, но после курсора я могу видеть, что пользователь набрал.Python curses - скрыть ввод пользователя

Конечно, я могу стереть и перерисовать весь экран после каждой нажатой клавиши, но он мигает - это расплывчато.

Любая идея, как избавиться от этих нажатых клавиш? Спасибо

+0

Возможный дубликат [Можно ли получить консольный ввод без эха в python?] (Http://stackoverflow.com/questions/4616813/can-i-get-console-input-without-echo-in-python) –

+0

Я использую проклятия. Нестандартный терминал. – 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') 

Вы в состоянии поместить любой одиночный символ или цифру, как п и то, что он вернется на экран, например: парол («*») для звездочек или passw ("") для no-echo.

Смежные вопросы