我正在python curses中開發一個應用程序。我正在使用getch()方法來獲取按下的鍵。 但我可以在屏幕上看到按下的按鍵。我可以隨時移動光標,但在光標後我可以看到用戶輸入的內容。Python curses - 隱藏用戶輸入
當然,我可以在每按下一個按鍵後擦除並重新繪製整個屏幕,但是它閃爍 - 這就是分解。
任何想法如何擺脫這些按下的鍵?謝謝
我正在python curses中開發一個應用程序。我正在使用getch()方法來獲取按下的鍵。 但我可以在屏幕上看到按下的按鍵。我可以隨時移動光標,但在光標後我可以看到用戶輸入的內容。Python curses - 隱藏用戶輸入
當然,我可以在每按下一個按鍵後擦除並重新繪製整個屏幕,但是它閃爍 - 這就是分解。
任何想法如何擺脫這些按下的鍵?謝謝
以下面的方式初始化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
"""
是的,cbreak()和noecho()是我想要的;)謝謝 – Blaskovic
有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(「*」)爲星號或密碼(「」)爲無回聲。
可能重複的[我可以得到控制檯輸入沒有在Python回聲?](http://stackoverflow.com/questions/4616813/can-i-get-console-input-without-echo-in-python) –
我正在使用curses。不是標準的終端輸入。 – Blaskovic
啊,我明白了。但是,'getpass'中使用的技術也可能對您的情況有所幫助。我認爲這值得一看。 –