我正在开发python curses中的一个应用程序。我使用getch()方法来获取按键。 但我可以在屏幕上看到按键。我可以随时移动光标,但在光标后我可以看到用户输入的内容。
当然,我可以在每按一次键后擦除并重绘整个屏幕,但它会闪烁 - 这就是分辨。
知道如何摆脱这些按键吗?谢谢
答案 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。