本篇讲一下Entry冷却验证的用法,其实我们在登录注册的时候用户名是否存在的验证一般不能等到全部都填写完后,点击注册再进行判断,最好的办法是在输入用户名时就立刻判断是否存在。
这篇内容是在上一篇合法性验证的基础上的升级版,点击查看上一篇
实现的思路:
1.建立一个包含用户名和密码的字典用于验证判断用户名是否存在
2.一个Label,一个Entry就可以了,我写代码的时候为了看起来更直观,把密码框也放进去了,其实只是摆设,没有用上
3.对用户名输入框进行验证判断,关键的冷却验证或者叫实时验证就在这一步,详细看代码
最终要呈现的效果:
注意观察l3标签Label组件里内容的变化,它是实时动态反馈的
附上代码:
from tkinter import *
root = Tk()
root.geometry("350x150")
f1 = Frame(root, pady=20)
f1.pack()
v = StringVar()
v1 = StringVar()
DIC = {"张三": "abc123", "王二胖": "123456", "李四": "123asd", "三毛": "654321"}
def exist1(username):
if username in DIC.keys():
v1.set("用户名【" + username + "】已存在")
return True
elif username == "":
v1.set("")
return True
else:
v1.set("用户名可以注册")
return True
exist = f1.register(exist1) #冷却验证必须要用register函数包起来
l1 = Label(f1, text="用户名:").grid(row=0, column=0)
e1 = Entry(f1, textvariable=v, validate="key", validatecommand=(exist, "%P")).grid(row=0, column=1) #%P表示获得最新的文本内容,validate参数要用key,当输入框内容变化的时候会调用exist1进行验证
l2 = Label(f1, text="密 码:").grid(row=2, column=0)
e2 = Entry(f1).grid(row=2, column=1)
l3 = Label(f1, textvariable=v1).grid(row=1, column=1)
root.mainloop()