【发布时间】:2021-05-12 17:59:04
【问题描述】:
我在下面有一个代码,它对输入框中的密码进行评分。我想让score 每次在输入框中输入一个字母时调用命令,但它不起作用但它没有返回任何错误。有人可以帮我吗?
from tkinter import *
import re
def showPassword(entry_box):
entry_box.config(show = '')
def hidePassword(entry_box):
entry_box.config(show = '*')
def addScore(l):
global score
for i in l:
if len(i) > 0:
score += 5
def minusScore(l):
global score
for i in l:
if len(i) == len(password.get()):
score -= 5
def Scoring():
text = passwordText.get()
if len(text) > 24 or len(text) < 8:
l.config(text = 'Length of password must be between 8 and 24')
else:
a = re.findall("[^a-zA-Z0-9!\"£$%^&*()_+-=]", text)
if len(a) != 0:
l.config(text = 'Invalid character has been used.\nPlease see bottom right.')
else:
global score
score = len(text)
lowercase = re.findall("[a-z]", text)
uppercase = re.findall("[A-Z]", text)
digits = re.findall("[0-9]", text)
specialCharacters = re.findall("[!$%^&*()-_=+]", text)
addScore([lowercase, uppercase, digits, specialCharacters])
if score - len(text) == 20:
score += 15
minusScore([lowercase, uppercase, digits])
pattern = ['q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m']
pattern_freq = []
for i in pattern:
ind = pattern.index(i)
if ind != 0 and ind != 25:
curr = pattern[ind-1]+i+pattern[ind+1]
pattern_freq.append(re.findall(curr, text.lower()))
print(pattern_freq)
for i in pattern_freq:
for a in i:
score -= 5
print('Minus 5 patten')
slider.set(score)
if score > 20:
l.config(text = 'Strong password')
root = Tk()
root.title('Password generator')
passwordText = StringVar()
passwordText.trace("w", callback = lambda name, index, mode: Scoring)
password = Entry(root, show = '*', textvariable = passwordText)
lab = Label(root, text = 'Password:')
password.grid(row = 0, column = 1, padx = 2)
lab.grid(row = 0, column = 0, padx = 2, pady = 2)
generate = Button(root, text = 'Generate password')
slider = Scale(root, from_ = -120, to = 60, orient = 'horizontal', length = 150)
slider.grid(row = 1, columnspan = 3)
generate.grid(row = 2, columnspan = 3, pady = 3)
l = Label(root, text = '')
l.grid(row = 3, columnspan = 3)
show = Button(root, text = 'Show')
show.bind("<ButtonPress-1>", lambda event: showPassword(password))
show.bind("<ButtonRelease-1>", lambda event: hidePassword(password))
show.grid(row = 0, column = 2, padx = 2)
info = Button(root, text = 'i')
【问题讨论】:
-
你做过研究吗?基于事件调用函数的方法有文献记载,网上的例子数不胜数。当可以从可用文档中回答问题时,不清楚为什么您需要我们的帮助。
-
抱歉我没有指定问题我已经编辑了我的问题。
-
您尝试使用
score作为全局变量和函数的名称 - 这肯定行不通。 -
我已经编辑了我的答案,但我又试了一次,这似乎不是问题
标签: python python-3.x tkinter tkinter-entry