import random
from tkinter import *
from tkinter import messagebox
def name_12():
button1.place_forget()
entry1.place_forget()
button2.place_forget()
entry2.place_forget()
button3.place_forget()
entry3.place_forget()
entry4.place_forget()
bt1.place_forget()
bt2.place_forget()
list11 = "1234567890"
list21 = "abcdefghijklmnopqrstuvwxyz"
list31 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
a11 = random.randint(0, 9)
b11 = random.randint(0, 25)
c11 = random.randint(0, 25)
a111 = random.randint(0, 9)
b111 = random.randint(0, 25)
c111 = random.randint(0, 25)
name_pd1 = list11[a11] + list21[b11] + list31[c11] + list11[a111] + list21[b111] + list31[c111]
button11 = Label(root, text="账号:", font=("幼圆", 20), bg='White')
entry11 = Entry(root, width=60, bg="whitesmoke")
button21 = Label(root, text="密码:", font=("幼圆", 20), bg='White')
entry21 = Entry(root, width=60, bg="whitesmoke", show="*")
button31 = Label(root, text="确认密码:", font=("幼圆", 20), bg='White')
entry31 = Entry(root, width=60, bg="whitesmoke", show="*")
button41 = Label(root, text="验证码:", font=("幼圆", 20), bg='White')
entry41 = Entry(root, width=30, bg="whitesmoke")
entry51 = Entry(root, width=20, bg="whitesmoke")
entry51.insert(0, name_pd1)
entry51.config(state='readonly')
button11.place(x=350, y=192)
entry11.place(x=450, y=200)
button21.place(x=350, y=252)
entry21.place(x=450, y=260)
button31.place(x=295, y=310)
entry31.place(x=450, y=318)
button41.place(x=322, y=370)
entry41.place(x=450, y=375)
entry51.place(x=730, y=375)
def name_121():
global zh_cc, mm_cc, zhk_zd, sj_cc
mm_zh = entry11.get()
mm_1 = entry21.get()
mm_2 = entry31.get()
mm_zh_tj = len(mm_zh)
mm_1_tj = len(mm_1)
mm_2_tj = len(mm_2)
yzm_1_1 = entry41.get()
sl_pd_1 = len(yzm_1_1)
print(yzm_1_1)
if mm_zh_tj == 0 and mm_1_tj == 0:
messagebox.showerror("错误提示!", "账号和密码不得为空!")
elif mm_zh_tj == 0:
messagebox.showerror("错误提示!", "账号不得为空!")
elif mm_1_tj == 0 or mm_2_tj == 0:
messagebox.showerror("错误提示!", "密码不得为空!")
else:
if mm_1 != mm_2:
messagebox.showerror("错误提示!", "两次密码不相同!")
else:
if yzm_1_1 != name_pd1:
if sl_pd_1 >= 1:
messagebox.showerror("错误提示!", "验证码错误!\n正确验证码为:" + name_pd1)
else:
messagebox.showerror("错误提示!", "验证码验证码不得为空!")
else:
if mm_zh_tj > 7:
messagebox.showerror("错误提示!", "用户名最多不得超过七个字!")
elif mm_1_tj < 7 or mm_1_tj > 15:
messagebox.showerror("错误提示!", "密码数量介于7-15之间!")
elif mm_2_tj < 7 or mm_2_tj > 15:
messagebox.showerror("错误提示!", "密码数量介于7-15之间!")
else:
if mm_1 == mm_2 and yzm_1_1 == name_pd1:
if mm_zh in sj_cc:
messagebox.showerror("错误提示!", "该账号已被注册!")
entry11.delete(0, END)
entry21.delete(0, END)
entry31.delete(0, END)
entry41.delete(0, END)
else:
messagebox.showinfo("注册成功!", "账号:\n" + mm_zh + "\n密码:\n" + mm_1 + '\n账号/密码已被添加进注册库!')
zh_cc = mm_zh
mm_cc = mm_1
zhk_zd[zh_cc] = mm_cc
sj_cc.append(zh_cc)
entry11.delete(0, END)
entry21.delete(0, END)
entry31.delete(0, END)
entry41.delete(0, END)
print(zhk_zd)
print(sj_cc)
print(mm_zh)
print(mm_1)
print(mm_2)
def name_111():
button11.place_forget()
entry11.place_forget()
button21.place_forget()
entry21.place_forget()
button31.place_forget()
entry31.place_forget()
button41.place_forget()
entry41.place_forget()
entry51.place_forget()
bt11.place_forget()
bt21.place_forget()
button1.place(x=350, y=192)
entry1.place(x=450, y=200)
button2.place(x=350, y=252)
entry2.place(x=450, y=260)
button3.place(x=322, y=310)
entry3.place(x=450, y=320)
entry4.place(x=730, y=320)
bt1.place(x=450, y=400)
bt2.place(x=730, y=400)
entry1.delete(0, END)
entry2.delete(0, END)
entry3.delete(0, END)
bt11 = Button(root, text='登录', command=name_111, width=20, height=2, bd=0, bg="limegreen", fg='White', activebackground="lightgreen", activeforeground='White')
bt21 = Button(root, text='注册', command=name_121, width=20, height=2, bd=0, bg="limegreen", fg='White', activebackground="lightgreen", activeforeground='White')
bt11.place(x=450, y=470)
bt21.place(x=730, y=470)
def name_11():
yzm_1 = entry3.get()
sl_pd = len(yzm_1)
print(yzm_1)
dl_zh = entry1.get()
dl_mm = entry2.get()
dl_zh_pd = len(dl_zh)
dl_mm_pd = len(dl_mm)
print(dl_zh)
print(dl_mm)
if dl_zh_pd == 0 and dl_mm_pd == 0:
messagebox.showerror("错误提示!", "账号密码不得为空!")
elif dl_zh_pd == 0:
messagebox.showerror("错误提示!", "账号不得为空!")
elif dl_mm_pd == 0:
messagebox.showerror("错误提示!", "密码不得为空!")
else:
if yzm_1 != name_pd:
if sl_pd >= 1:
messagebox.showerror("错误提示!", "验证码错误!\n正确验证码为:"+name_pd)
else:
messagebox.showerror("错误提示!", "验证码验证码不得为空!")
else:
if dl_zh not in sj_cc and dl_mm != zhk_zd[dl_zh]:
messagebox.showerror("错误提示!", "账号密码不正确!")
elif dl_zh not in sj_cc:
messagebox.showerror("错误提示!", "账号不正确!")
elif dl_mm != zhk_zd[dl_zh]:
messagebox.showerror("错误提示!", "密码不正确!")
elif dl_zh in sj_cc and dl_mm == zhk_zd[dl_zh] and yzm_1 == name_pd:
messagebox.showinfo("登录成功!", "登录成功!")
print("登录成功!")
def name_11_sl():
list1_dl = "1234567890"
list2_dl = "abcdefghijklmnopqrstuvwxyz"
list3_dl = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
a_dl = random.randint(0, 9)
b_dl = random.randint(0, 25)
c_dl = random.randint(0, 25)
a1_dl = random.randint(0, 9)
b1_dl = random.randint(0, 25)
c1_dl = random.randint(0, 25)
name_pd_dl = list1_dl[a_dl] + list2_dl[b_dl] + list3_dl[c_dl] + list1_dl[a1_dl] + list2_dl[b1_dl] + list3_dl[c1_dl]
entry4.insert(0, name_pd_dl)
entry4.config(state='readonly')
zhk_zd = {'123' : "456"}
sj_cc = ["123"]
zh_cc = ""
mm_cc = ""
root = Tk()
root.title("这是一个测试界面")
root.geometry("1200x720+390+150")
root.resizable(False, False)
root.config(bg="white")
list1 = "1234567890"
list2 = "abcdefghijklmnopqrstuvwxyz"
list3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
a = random.randint(0, 9)
b = random.randint(0, 25)
c = random.randint(0, 25)
a1 = random.randint(0, 9)
b1 = random.randint(0, 25)
c1 = random.randint(0, 25)
name_pd = list1[a]+list2[b]+list3[c]+list1[a1]+list2[b1]+list3[c1]
button1 = Label(root, text="账号:", font=("幼圆", 20), bg='White')
entry1 = Entry(root, width=60, bg="whitesmoke")
button2 = Label(root, text="密码:", font=("幼圆", 20), bg='White')
entry2 = Entry(root, width=60, show="*", bg="whitesmoke")
button3 = Label(root, text="验证码:", font=("幼圆", 20), bg='White')
entry3 = Entry(root, width=30, bg="whitesmoke")
entry4 = Entry(root, width=20, bg="whitesmoke")
entry4.insert(0, name_pd)
entry4.config(state='readonly')
bt1 = Button(root, text='登 录', command=name_11, width=20, height=2, bd=0, bg="limegreen", fg='White', activebackground="lightgreen", activeforeground='White')
bt2 = Button(root, text='注 册', command=name_12, width=20, height=2, bd=0, bg="limegreen", fg='White', activebackground="lightgreen", activeforeground='White')
button1.place(x=350, y=192)
entry1.place(x=450, y=200)
button2.place(x=350, y=252)
entry2.place(x=450, y=260)
button3.place(x=322, y=310)
entry3.place(x=450, y=320)
entry4.place(x=730, y=320)
bt1.place(x=450, y=400)
bt2.place(x=730, y=400)
root.mainloop()
这段代码是一个使用Python的Tkinter库创建的简单图形用户界面(GUI)程序,用于模拟一个登录和注册系统。程序中包含多个函数,每个函数负责不同的功能。下面我将对代码进行分析,并将其整理成文章的形式。
该程序主要由以下几个部分组成:
1.初始化和界面布局:程序开始时,会初始化一些变量和创建基本的GUI界面,包括账号、密码和验证码输入框,以及登录和注册按钮。
2.注册功能:用户可以输入账号、密码和验证码进行注册。程序会检查输入的有效性,并在满足条件时将账号和密码保存到内存中。
3.登录功能:用户可以输入账号和密码进行登录。程序会验证输入的账号和密码是否与注册时保存的信息匹配。
4.验证码生成:程序可以生成一个随机的验证码供用户输入。
5.错误处理和反馈:程序会根据用户的输入和操作给出相应的提示信息。
程序首先定义了几个字符列表,用于生成随机的验证码。接着,程序创建了一个Tkinter窗口,并设置了标题和大小。窗口中包含账号、密码和验证码的标签和输入框,以及登录和注册按钮。
name_12
函数负责处理注册逻辑。它首先隐藏了所有的输入框和按钮,然后生成一个随机的验证码。用户输入账号、密码和确认密码后,程序会进行一系列的验证,包括检查输入是否为空、密码是否一致、验证码是否正确等。如果所有验证都通过,程序会将账号和密码保存到内存中的字典里,并显示注册成功的消息。
name_11
函数负责处理登录逻辑。用户输入账号和密码后,程序会验证这些信息是否与注册时保存的信息匹配。如果匹配,显示登录成功的消息;否则,显示错误提示。
name_11_sl
函数用于生成一个新的随机验证码,并将其插入到验证码输入框中。
程序使用messagebox
模块来显示错误提示和成功消息。这些消息框会根据用户的操作和输入情况弹出,提供反馈。
为了使文章更加清晰,我们可以将代码分成几个部分,并对每个部分进行解释。每个函数或代码块的解释可以单独成段,确保逻辑清晰和易于理解。
name_12()
函数这个函数用于初始化注册界面。它首先隐藏了之前的界面元素(如登录按钮、输入框等),然后生成一个随机的验证码,并创建新的注册界面元素,包括账号、密码、确认密码和验证码的标签和输入框。验证码是只读的,用户不能修改。
name_121()
函数这个函数是注册按钮的回调函数,用于处理用户的注册请求。它会获取用户输入的账号、密码和验证码,然后进行一系列的验证:
如果所有验证都通过,程序会检查账号是否已被注册。如果没有被注册,它会将账号和密码保存到内存中的字典里,并显示注册成功的消息。如果任何验证失败,会弹出相应的错误提示。
name_111()
函数这个函数用于在用户点击登录按钮后,将界面切换回登录界面。它隐藏了注册界面的所有元素,并重新显示登录界面的元素。
name_11()
函数这个函数是登录按钮的回调函数,用于处理用户的登录请求。它会获取用户输入的账号、密码和验证码,然后进行验证:
如果账号密码正确,显示登录成功的消息。如果任何验证失败,会弹出相应的错误提示。
name_11_sl()
函数这个函数用于生成一个新的随机验证码,并将其插入到验证码输入框中。
root.mainloop()
使程序进入事件循环,等待用户的操作。程序开始时,首先初始化一些变量和创建基本的GUI界面。
# 初始化变量和界面
zh_mr = {}
zhk_zd = {}
sj_cc = []
zh_cc = ""
mm_cc = ""
keys = ""
root = Tk()
root.title("这是一个测试界面")
root.geometry("1200x720+390+150")
root.resizable(False, False)
root.config(bg="white")
程序定义了一个函数name_11_sl
用于生成随机验证码,并将其插入到验证码输入框中。
def name_11_sl():
list1_dl = "1234567890"
list2_dl = "abcdefghijklmnopqrstuvwxyz"
list3_dl = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
a_dl = random.randint(0, 9)
b_dl = random.randint(0, 25)
c_dl = random.randint(0, 25)
a1_dl = random.randint(0, 9)
b1_dl = random.randint(0, 25)
c1_dl = random.randint(0, 25)
name_pd_dl = list1_dl[a_dl] + list2_dl[b_dl] + list3_dl[c_dl] + list1_dl[a1_dl] + list2_dl[b1_dl] + list3_dl[c1_dl]
entry4.insert(0, name_pd_dl)
entry4.config(state='readonly')
name_12
函数用于初始化注册界面,而name_121
函数处理用户的注册请求。
def name_12():
# ...(省略了部分代码,主要是隐藏界面元素)
# 生成随机验证码
list11 = "1234567890"
list21 = "abcdefghijklmnopqrstuvwxyz"
list31 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
a11 = random.randint(0, 9)
b11 = random.randint(0, 25)
c11 = random.randint(0, 25)
a111 = random.randint(0, 9)
b111 = random.randint(0, 25)
c111 = random.randint(0, 25)
name_pd1 = list11[a11] + list21[b11] + list31[c11] + list11[a111] + list21[b111] + list31[c111]
# ...(省略了部分代码,主要是创建新的界面元素)
def name_121():
# ...(省略了部分代码,主要是获取用户输入)
# 验证输入信息
if mm_zh_tj == 0 and mm_1_tj == 0:
messagebox.showerror("错误提示!", "账号和密码不得为空!")
elif mm_zh_tj == 0:
messagebox.showerror("错误提示!", "账号不得为空!")
elif mm_1_tj == 0 or mm_2_tj == 0:
messagebox.showerror("错误提示!", "密码不得为空!")
else:
if mm_1 != mm_2:
messagebox.showerror("错误提示!", "两次密码不相同!")
else:
if yzm_1_1 != name_pd1:
messagebox.showerror("错误提示!", "验证码错误!\n正确验证码为:" + name_pd1)
else:
if mm_zh_tj > 7:
messagebox.showerror("错误提示!", "用户名最多不得超过七个字!")
elif mm_1_tj < 7 or mm_1_tj > 15:
messagebox.showerror("错误提示!", "密码数量介于7-15之间!")
elif mm_2_tj < 7 or mm_2_tj > 15:
messagebox.showerror("错误提示!", "密码数量介于7-15之间!")
else:
if mm_1 == mm_2 and yzm_1_1 == name_pd1:
if mm_zh in sj_cc:
messagebox.showerror("错误提示!", "该账号已被注册!")
entry11.delete(0, END)
entry21.delete(0, END)
entry31.delete(0, END)
entry41.delete(0, END)
else:
messagebox.showinfo("注册成功!", "账号:\n" + mm_zh + "\n密码:\n" + mm_1 + '\n账号/密码已被添加进注册库!')
zh_cc = mm_zh.strip()
mm_cc = mm_1.strip()
zhk_zd[zh_cc] = mm_cc
keys = zh_cc
sj_cc.append(zh_cc)
entry11.delete(0, END)
entry21.delete(0, END)
entry31.delete(0, END)
entry41.delete(0, END)
name_11
函数用于处理用户的登录请求。
def name_11():
# ...(省略了部分代码,主要是获取用户输入)
# 验证登录信息
if dl_zh_pd == 0 and dl_mm_pd == 0:
messagebox.showerror("错误提示!", "账号密码不得为空!")
elif dl_zh_pd == 0:
messagebox.showerror("错误提示!", "账号不得为空!")
elif dl_mm_pd == 0:
messagebox.showerror("错误提示!", "密码不得为空!")
else:
if yzm_1 != name_pd:
if sl_pd >= 1:
messagebox.showerror("错误提示!", "验证码错误!\n正确验证码为:"+name_pd)
else:
messagebox.showerror("错误提示!", "验证码验证码不得为空!")
else:
if dl_zh not in sj_cc and dl_mm != zhk_zd[dl_mm]:
messagebox.showerror("错误提示!", "账号密码不正确!")
elif dl_zh not in sj_cc:
messagebox.showerror("错误提示!", "账号不正确!")
elif dl_mm != zhk_zd[dl_mm]:
messagebox.showerror("错误提示!", "密码不正确!")
elif dl_zh in sj_cc and dl_mm == zhk_zd[dl_mm] and yzm_1 == name_pd:
messagebox.showinfo("登录成功!", "登录成功!")
print("登录成功!")
name_111
函数用于在用户点击登录按钮后,将界面切换回登录界面。
def name_111():
# ...(省略了部分代码,主要是隐藏注册界面元素)
# 显示登录界面元素
程序还包括了创建窗口、设置标题、布局界面元素等基础代码,以及一些用于显示消息框和处理用户输入的辅助代码。
这个程序是一个基础的登录和注册系统,使用了Python的Tkinter库来创建GUI。它展示了如何处理用户输入、生成随机验证码、以及如何进行基本的错误检查和反馈。尽管它是一个简单的示例,但它涵盖了构建类似系统所需的一些基本概念和实践。
整个程序通过Tkinter创建了一个简单的图形用户界面,允许用户进行登录和注册操作。每个函数都负责特定的功能,如界面切换、数据验证、信息保存等。程序使用了内存中的数据结构来模拟用户信息的存储,实际应用中这些信息通常会存储在数据库中。此外,程序中的验证码生成和验证机制是基础的,仅用于演示目的,在真实环境中需要更复杂的实现以确保安全性。
请注意,由于代码中使用了random
模块生成验证码,每次程序运行时验证码都会变化,这在实际应用中可能会导致一些问题,比如用户无法在注册后使用相同的验证码进行登录。在实际应用中,验证码通常会与服务器端进行交互以确保安全性和一致性。