Vla*_*kov 0 python passwords user-input input python-3.x
我目前在Python 3上制作一个程序,我需要用户输入程序稍后使用的密码.我现在password = input("Enter password: ")遇到的问题是,如果我只是使用用户输入的字符将在屏幕上显示 - 我宁愿用星号替换它们.
当然,我可以使用pygame并执行以下操作:
import pygame, sys
pygame.init()
def text (string, screen, color, position, size, flag=''):
font = pygame.font.Font(None, size)
text = font.render(string, 1, (color[0], color[1], color[2]))
textpos = text.get_rect(centerx=position[0], centery=position[1])
screen.blit(text, textpos)
pygame.display.flip()
screen = pygame.display.set_mode((640, 480))
alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
text('Enter password:', screen, [255, 0, 0], [320, 100], 36)
pygame.display.flip()
password = ''
password_trigger = True
while password_trigger:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if chr(int(str(event.key))) in alphabet:
password += chr(int(str(event.key)))
screen.fill((0, 0, 0))
text('*'*len(password), screen, [0, 50, 250], [320, 360], 36)
text('Enter password:', screen, [255, 0, 0], [320, 100], 36)
pygame.display.flip()
elif (event.key == pygame.K_RETURN) and (len(password) > 0):
password_trigger = False
Run Code Online (Sandbox Code Playgroud)
但这似乎有点矫枉过正(同样,pygame显示将在一个新窗口中打开,我宁愿避免这种情况).有一个简单的方法吗?
您可以使用标准getpass模块完全隐藏用户的输入:
>>> import getpass
>>> pw = getpass.getpass("Enter password: ")
Enter password:
>>> pw
'myPassword'
Run Code Online (Sandbox Code Playgroud)