python - 单击相应值时标签不正确
问题描述
from tkinter import *
import random
def check():
en.delete(0,END)
letters = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'
signs = '@#$%^&*!<>'
digits = '1234567890'
if pw.get() == random.choice(digits) + random.choice(letters) + random.choice(signs):
strong = 'Very good password'
strength.set(strong)
elif pw.get() == random.choice(digits) + random.choice(letters):
med = 'Medium password strength'
strength.set(med)
elif pw.get() == random.choice(digits):
weak = 'Password too weak! Use another one'
strength.set(weak)
elif len(pw.get()) < 8:
tooweak = 'Password not acceptable!'
strength.set(tooweak)
win = Tk()
win.title('Password Generator')
lb = Label(win,text='Create a password')
lb.pack(pady=10)
pw = StringVar()
en = Entry(win,textvariable=pw)
en.pack(pady=10)
btn = Button(win,text='Create',command=check)
btn.pack(pady=10)
strength = StringVar()
lbstr = Label(win,textvariable=strength)
lbstr.pack(pady=10)
这个程序没有错误。但是,当我运行并使用 中的 if 语句时,如果我使用满足和中条件的密码,def check():
则无法显示标签。请问可以用set方法来改变label的文字吗?我还可以问一下,如果我希望密码在条目中包含数字、字母和符号,我输入是否正确?对于这个问题,我已经通过研究解决了这个问题。如果我再次遇到同样的问题,我会整理好我的脚本并检查拼写和使用的方法是否正确。在问新人之前,我会先尽力而为,只问必要的。strength.set(strong)
strength.set(med)
strength.set(weak)
random.choice(digits) + random.choice(letters) + random.choice(signs)
解决方案
首先你en.delete(0,END)
在函数的开头check()
调用它会导致pw.get()
返回空字符串。它应该在check()
函数结束时调用。
要检查输入密码的弱点,您可以创建一个列表来保存密码中的字母、符号和数字的数量。然后您可以使用该列表来确定密码的弱点:
def check():
letters = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'
signs = '@#$%^&*!<>'
digits = '1234567890'
passwd = pw.get().strip()
if len(passwd) < 8:
tooweak = 'Password not acceptable!'
strength.set(tooweak)
lbstr.config(fg='red')
else:
counts = [0, 0, 0]
# go through each character in the password
# and count the number of letters, signs and digits
for c in passwd:
if c in letters:
counts[0] += 1
elif c in signs:
counts[1] += 1
elif c in digits:
counts[2] += 1
print(counts)
# check how many zeros are in the counts list
zeros = counts.count(0)
if zeros == 0:
strong = 'Very good password'
strength.set(strong)
lbstr.config(fg='blue')
elif zeros == 1:
med = 'Medium password strength'
strength.set(med)
lbstr.config(fg='green')
elif zeros == 2:
weak = 'Password too weak! Use another one'
strength.set(weak)
lbstr.config(fg='red')
# clear the password entry
#en.delete(0,END)
pw.set('')
推荐阅读
- tensorflow - 保存包含通用句编码器作为其嵌入的模型
- java - Android:未解决的依赖关系
- django - 查看 Django 表单提交是否来自管理员
- open-policy-agent - 或在 Open Policy Agent 中(联合行为)
- php - 将字符串转换为一致但随机的 10 个选项中的 1 个
- javascript - 当用户切换到完全不同的窗口时,有什么方法可以避免焦点事件?
- hadoop - hive/impala 元数据刷新
- macos - Mac 上的 WS_EX_NOACTIVATE 样式窗口
- azure - 合并 (UPSERT) - AZURE SQL DWH
- typescript - React Native 样式表合并:传播类型只能从对象类型创建