GUI登录界面

 源代码部分

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模块来显示错误提示和成功消息。这些消息框会根据用户的操作和输入情况弹出,提供反馈。

代码排版

为了使文章更加清晰,我们可以将代码分成几个部分,并对每个部分进行解释。每个函数或代码块的解释可以单独成段,确保逻辑清晰和易于理解。


函数讲解

1. name_12() 函数

这个函数用于初始化注册界面。它首先隐藏了之前的界面元素(如登录按钮、输入框等),然后生成一个随机的验证码,并创建新的注册界面元素,包括账号、密码、确认密码和验证码的标签和输入框。验证码是只读的,用户不能修改。

2. name_121() 函数

这个函数是注册按钮的回调函数,用于处理用户的注册请求。它会获取用户输入的账号、密码和验证码,然后进行一系列的验证:

  • 检查账号和密码是否为空。
  • 检查两次输入的密码是否一致。
  • 检查验证码是否正确。
  • 检查账号长度是否超过7个字符,密码长度是否在7到15个字符之间。

如果所有验证都通过,程序会检查账号是否已被注册。如果没有被注册,它会将账号和密码保存到内存中的字典里,并显示注册成功的消息。如果任何验证失败,会弹出相应的错误提示。

3. name_111() 函数

这个函数用于在用户点击登录按钮后,将界面切换回登录界面。它隐藏了注册界面的所有元素,并重新显示登录界面的元素。

4. name_11() 函数

这个函数是登录按钮的回调函数,用于处理用户的登录请求。它会获取用户输入的账号、密码和验证码,然后进行验证:

  • 检查账号和密码是否为空。
  • 检查验证码是否正确。
  • 检查账号和密码是否与注册时保存的信息匹配。

如果账号密码正确,显示登录成功的消息。如果任何验证失败,会弹出相应的错误提示。

5. name_11_sl() 函数

这个函数用于生成一个新的随机验证码,并将其插入到验证码输入框中。

6. 其他辅助代码

  • 初始化变量和界面:程序开始时,初始化了一些变量,如字符列表、随机数生成等,并创建了基本的GUI界面。
  • 事件循环root.mainloop() 使程序进入事件循环,等待用户的操作。

分段讲解

1. 初始化和界面布局

程序开始时,首先初始化一些变量和创建基本的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")

2. 生成随机验证码

程序定义了一个函数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')

3. 注册功能

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)

4. 登录功能

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("登录成功!")

5. 切换界面

name_111 函数用于在用户点击登录按钮后,将界面切换回登录界面。

def name_111():
    # ...(省略了部分代码,主要是隐藏注册界面元素)
    # 显示登录界面元素

6. 其他代码

程序还包括了创建窗口、设置标题、布局界面元素等基础代码,以及一些用于显示消息框和处理用户输入的辅助代码。


结论

这个程序是一个基础的登录和注册系统,使用了Python的Tkinter库来创建GUI。它展示了如何处理用户输入、生成随机验证码、以及如何进行基本的错误检查和反馈。尽管它是一个简单的示例,但它涵盖了构建类似系统所需的一些基本概念和实践。

整个程序通过Tkinter创建了一个简单的图形用户界面,允许用户进行登录和注册操作。每个函数都负责特定的功能,如界面切换、数据验证、信息保存等。程序使用了内存中的数据结构来模拟用户信息的存储,实际应用中这些信息通常会存储在数据库中。此外,程序中的验证码生成和验证机制是基础的,仅用于演示目的,在真实环境中需要更复杂的实现以确保安全性。


请注意,由于代码中使用了random模块生成验证码,每次程序运行时验证码都会变化,这在实际应用中可能会导致一些问题,比如用户无法在注册后使用相同的验证码进行登录。在实际应用中,验证码通常会与服务器端进行交互以确保安全性和一致性。

你可能感兴趣的:(GUI开发,GUI登录窗口,python,开发语言)