这是一个使用Python的tkinter库创建的动态验证码验证程序。程序中定义了三个函数:setgif()用于生成随机验证码图片,showp()用于显示验证码图片,dupass()用于检查用户输入的验证码是否正确。程序界面包括一个标题为"动态验证码"的窗口,一个显示验证码图片的标签,一个输入框用于用户输入验证码,以及三个按钮分别用于换一张验证码、确认和退出。
-
导入必要的模块:
Tkinter
:用于创建图形用户界面。messagebox
:用于显示消息框。random
:用于生成随机数。
-
创建主窗口:
root = Tk()
创建了一个Tkinter窗口实例。
-
定义验证码图片和验证码对应的密码:
gif
:包含验证码图片文件名的列表。note
:包含与验证码图片对应的密码的列表。
-
定义函数:
setgif()
:设置要显示的验证码图片和相关参数。showp(x)
:显示验证码图片的某帧,并在一定时间后显示下一帧。dupass()
:验证用户输入的密码是否正确,并给出相应的提示。close()
:关闭程序。
-
设置窗口属性和布局:
- 设置窗口标题、始终在最前、大小等属性。
- 创建标签、输入框和按钮,并设置它们在窗口中的位置。
-
定义全局变量:
many
:用于存储当前验证码的索引。maxp
:用于存储验证码图片的帧数。ranima
:存储当前验证码图片的完整路径。frames
:存储验证码图片的每一帧。
-
主循环:
setgif()
初始化验证码显示。root.mainloop()
进入Tkinter事件循环,等待用户操作。
这个程序可以作为一个简单的示例来演示如何使用Tkinter创建带有动态验证码的GUI程序。然而,实际应用中,验证码系统会更加复杂,包括但不限于验证码的生成、安全性、错误处理等方面。
from tkinter import *
from tkinter.messagebox import *
import random
root = Tk()
gif=["验证码0","验证码1","验证码2","验证码3","验证码4","验证码5","验证码6","验证码7","验证码8","验证码9","验证码10","验证码11","验证码12"]
note=["36uad","eun2p","tqy19","1tt8i","1gria","4gsah","2q6gy","2gnf7","q4q1y","5qhi6","1ferh","wtyiq2","5ttyi"]
def setgif():
global many
global maxp
global ranima
global frames
many = random.randint(0, len(gif) - 1)
ranima = './cap/' + gif[many] + '.gif'
maxp = 6
frames = [PhotoImage(file=ranima, format='gif -index %i' % (i)) for i in range(maxp)]
showp(0)
def showp(x):
global maxp
global frames
frame = frames[x]
x += 1
label = Label(root, image=frame, height=23).grid(column=2, row=1)
root.after(800, showp, x % maxp)
def dupass():
global many
if str(note[many]).lower() == m_str_var.get().strip("").lower():
warn = showwarning(title='动态验证码', message='验证通过,将退出系统!')
root.destroy()
else:
warn = showwarning(title='动态验证码', message='验证码不正确,请重新输入!')
setgif()
def close():
root.destroy()
root.title('动态验证码')
root.wm_attributes('-topmost', 1)
root.geometry('400x110')
image1 = PhotoImage(file='sport.png')
add = Label(root,text='新增会员',image=image1).grid(column=0, row=0)
explain = Label(root,text='请输入验证码:').grid(column=0, row=1)
m_str_var = StringVar()
cap=Entry(text='0',textvariable=m_str_var,width=10).grid(column=1, row=1)
actre = Button(root,text="换一张", relief=FLAT, command=setgif,width=10)
actre.grid(column=3, row=1)
actis = Button(root, text="确认", command=dupass,width=10)
actis.grid(column=2, row=2)
actend = Button(root, text="退出", command=close,width=10)
actend.grid(column=3, row=2)
setgif()
root.mainloop()