使用 tkinter GUI 在 Python 中编写了一个简单的密码生成器程序。在复选框的帮助下,用户可以选择生成密码的来源:字母、数字、符号。在这种情况下,密码由非重复值组成,生成方式如下:
def generate():
select = ''
if var_letters.get() == True:
select += string.ascii_lowercase
if var_digits.get() == True:
select += string.digits
if var_symbols.get() == True:
select += string.punctuation
number_of_letters = menu_var.get()
password = ''.join(random.sample(select, number_of_letters))
密码长度是通过在 OptionMenu 中选择一项来设置的,并且限制为 6 到 20 之间的值:
menu_var = IntVar()
length_of_password = [i for i in range(1,21)]
menu_var.set(6)
menu = OptionMenu(root, menu_var, *length_of_password)
menu.place(x=300,y=20)
问题就出在这里:如果我只选择数字并且密码长度超过10,那么自然会出现错误
ValueError: sample larger than population
因为 我们只有 10 位数字。尝试做这样的事情
if(var_digits.get() == True and var_letters.get() == False and var_symbols.get() == False):
length_of_password = [i for i in range(6,11)]
else
length_of_password = [i for i in range(6,21)]
但是,此选项不起作用。
对此,问题来了,是否可以根据用户的选择自适应地改变OptionMenu中的项数?
当然,看起来可以更简单一些,但是在这种情况下,如果用户取消选中该项目,您可以简单地使用正则表达式