首页 > 解决方案 > 单击相应值时标签不正确

问题描述

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)

标签: pythonuser-interfacetkinter

解决方案


首先你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('')

推荐阅读