WHCSRL 技术网

【Python实战案例】基于tkinter实现简单登录注册

话不多说,直接上代码

#encoding=utf-8
import tkinter
from tkinter import messagebox
# 初始化对象
login = tkinter.Tk()
# 定义标题名称
login.title("登录")
# 定义屏幕尺寸
login.geometry('200x200')
# 定义label标签文本  grid定义显示位置 布局管理器
tkinter.Label(login,text='登录').grid(row=0,column=0,columnspan=2)
tkinter.Label(login,text='用户名:').grid(row=1,column=0)
# 定义输入的文本框,类似于html中的text
name = tkinter.Entry(login)
name.grid(row=1,column=1)
# 定义label标签文本  grid定义显示位置
tkinter.Label(login,text='密  码:').grid(row=2,column=0,sticky=tkinter.E)
# 此种方式定义是为了避免出现‘NoneType’ object has no attribute ‘get’的错误
passwd = tkinter.Entry(login,show='*')
passwd.grid(row=2,column=1)

# 登录注册的方法
def success():
    if name.get() == 'root' and passwd.get() == '123':
        # 定义消息提示框
        messagebox.showinfo(title='successful',message='登录成功')
    else:
        messagebox.showerror(title='wrong',message='登录失败,用户名或密码错误')
# 定义登录的按钮,command绑定点击的事件
tkinter.Button(login,text='登录',command=success).grid(row=3,column=0,columnspan=2)

# 定义注册的方法
def register():
    register = tkinter.Tk()
    register.title('注册')
    register.geometry('200x200')
    tkinter.Label(register,text='用户注册').grid(row=0,column=0,columnspan=2)
    # 用户名输入框
    tkinter.Label(register,text='用户  名:').grid(row=1,column=0,sticky=tkinter.E)
    name = tkinter.Entry(register)
    name.grid(row=1,column=1)

    # 密码输入框
    tkinter.Label(register,text='密码:').grid(row=2,column=0,sticky=tkinter.E)
    password = tkinter.Entry(register,show='*')
    password.grid(row=2,column=1)

    # 密码确认
    tkinter.Label(register,text='确认密码:').grid(row=3,column=0)
    repassword = tkinter.Entry(register,show='*')
    repassword.grid(row=3,column=1)

    # 手机号码输入
    tkinter.Label(register,text='手机号:').grid(row=4,column=0,sticky=tkinter.E)
    phone = tkinter.Entry(register)
    phone.grid(row=4,column=1)

    # 身份证号输入
    tkinter.Label(register,text='身份证号:').grid(row=5,column=0)
    IDCard = tkinter.Entry(register)
    IDCard.grid(row=5,column=1)

    # 正则匹配
    def card(input_psd):
        string = "~!@#$%%^&*()_+-*/<>,.[]/"
        for i in string:
            if i in input_psd:
                return True
        return False

    # 注册的格式判断
    def registered():
        if not (any([x.isdigit() for x in name.get()]) and any([x.isalpha() for x in name.get()]) and card(name.get())):
            messagebox.showerror(title='wrong',message='注册失败,用户名格式错误,必须包括字母和数字以及特殊符号')
        elif len(password.get()) < 8:
            messagebox.showerror(title='wrong',message='注册失败,密码不应少于8位')
        elif password.get() != repassword.get():
            messagebox.showerror(title='wrong',message='注册失败,两次密码不相同')
        elif not (phone.get().isdigit() and len(phone.get()) == 11):
            messagebox.showerror(title='wrong',message='注册失败,请输入正确的11位手机号')
        elif len(IDCard.get()) != 18:
            messagebox.showerror(title='wrong',message='注册失败,请输入正确的18位身份证号')
        else:
            messagebox.showinfo(title='successful',message='注册成功!')

    tkinter.Button(register,text='注册',command=registered).grid(row=6,column=0,columnspan=2)

#定义执行按钮
tkinter.Button(login,text='还没有账号?点我开始注册!',command=register).grid(row=4,column=0,columnspan=2)
#开启窗口的主入口
login.mainloop()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92

执行效果

登录:

1
推荐阅读