我正在尝试创建一个登录窗口,提示用户输入用户名和密码,尽管输入密码时我正在寻找要打印的星号,例如常见的密码输入(即 - Sekr3t 回显为:* * * * * *)。
这是我到目前为止的代码,我不明白为什么它不回显星号:
import msvcrt
import sys
def login(prompt = '> '):
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':
# position of my error
passw = passw[:-1]
else:
write('*')
passw = passw + x
msvcrt.putch('\r')
msvcrt.putch('\n')
return passw
任何帮助,将不胜感激。
您应该能够通过写入字符来擦除星号\x08 \x08
. The \x08
将光标向后移动一个位置,空格将覆盖星号,然后是最后一个\x08
将再次将光标移回,将其放在正确的位置以写入下一个*
.
我不知道如何确定何时键入退格键,但您可以轻松做到这一点:只需添加类似的内容print repr(x)
当你打电话之后x = msvcrt.getch()
,然后启动程序并按退格键。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)