Python GUI编程(Tkinter)——注册页面

Python图形用户界面设计

# 1、创建个人注册界面:用户名、密码、确认密码、性别、联系方式···注册
    # 当确认密码和密码相同时,显示'欢迎XX注册'
    # 否则,显示'密码错误,请重新注册'
import tkinter
from tkinter import *
from tkinter import messagebox

win = tkinter.Tk()
win.title('个人注册界面')
win.geometry("500x300+200+100")

# 显示选择状态的标签
# txt=StringVar()
# txt.set("请选择")
# lab=Label(win,textvariable=txt,relief='ridge',width=10)

# 定义状态变量对象
radVar1=tkinter.IntVar()
radVar2=tkinter.IntVar()
radVar3=tkinter.IntVar()
# 单选按钮
chk=['男','女','保密'] #定义几个选项的全局变量

# 布局设置 性别
# 使用靠左、居中、靠右对齐排列放置单选按钮组,当其中某个单选按钮被选中时,触发属性command对应的方法
# Radiobutton单选按钮 value=0表示被选中,value=1表示没选中
Gender1=tkinter.Radiobutton(win,width=3,text=chk[0],\
    variable=radVar1,value=0,font=5)
Gender1.grid(column=1,row=4,columnspan=3,sticky=tkinter.W)

Gender2=tkinter.Radiobutton(win,width=3,text=chk[1],\
    variable=radVar2,value=1,font=5)
Gender2.grid(column=1,row=4,columnspan=3,sticky='')

Gender3=tkinter.Radiobutton(win,width=3,text=chk[2],\
    variable=radVar3,value=0,font=5)
Gender3.grid(column=1,row=4,columnspan=3,sticky=tkinter.E)
# curRad.pack()

# 标签组件 用于窗体容器中显示文字内容的组件
# 其中 sticky=tkinter.W为设置行列对齐方式,N:北/上对齐  S:南/下对齐 W:西/左对齐 E:东/右对齐
L1=Label(win, text="注册界面",font='Helvvetica -36 bold')
L2=Label(win, text="用户名: ",anchor='ne',font='song')
L3=Label(win, text="密码: ",anchor='ne',font='song')
L4=Label(win, text="确认密码: ",anchor='ne',font='song')
L5=Label(win, text="性别: ",anchor='ne',font='song')
L6=Label(win, text="联系方式: ",anchor='ne',font='song')
L7=Label(win, text="身份证号码: ",anchor='ne',font='song')

# 标签组件 grid网格排列
L1.grid(row=0,column=1)
# 用户名
L2.grid(row=1,sticky=tkinter.E)
# 密码
L3.grid(row=2,sticky=tkinter.E)
# 确认密码
L4.grid(row=3,sticky=tkinter.E)
# 性别
L5.grid(row=4,sticky=tkinter.E)
# 联系方式
L6.grid(row=5,sticky=tkinter.E)
# 身份证号码
L7.grid(row=6,sticky=tkinter.E)

# 设置(定义)文本框组件
# 用户名
e1=Entry(win)
# 密码
e2=Entry(win)
# 确认密码
e3=Entry(win,show='*')
# 联系方式
e5=Entry(win)
# 身份证号码
e6=Entry(win)

# 文本框组件 grid网格排列
# 用户名
e1.grid(row=1,column=1)
# 密码
e2.grid(row=2,column=1)
# 确认密码
e3.grid(row=3,column=1)
# 联系方式
e5.grid(row=5,column=1)
# 身份证号码
e6.grid(row=6,column=1)

# 定义函数 输入内容为特殊符号时返回True,为非特殊符号时返回False
def special_symbols(input_psd):
    string = "~!@#$%^&*()_+-*/<>,.[]\/"
    for i in input_psd:
        if i in string:
            return True
    return False
    
# 定义函数 规定身份证号码内容信息0~9和x
# 此处有一个问题当定义string内容为小写字母‘x’时,身份证文本框中输入大写字母‘X’才能注册成功。
# 反之,当定义string内容为大写字母‘X’时,当身份证文本框中输入小写字母‘x’才能注册成功。
def id_card(x):
    string=('1','2','3','4','5','6','7','8','9','0',x)
    if x.endswith(string):
        return True
    else:
        return False

# 定义登录功能函数 规定用户登录次数为3次,登录失败3次则锁定账号24小时
def login():
    # 用户名列表
    loading = ['a','123','b','456']
    # 判断用户名是否已注册
    if e2.get() in loading:
        # 将密码与确认密码判断是否相等
        key = e2.get()
        for i in range(100):
            if i < 3:
                if key == e3.get():
                    messagebox.showerror(title='wrong',message="登录成功!")
                    i=3
                    break
                else:
                    messagebox.showerror(title='wrong',message="登录失败,请确认用户名或者密码!")
                    i=3
            else:
                messagebox.showerror(title='wrong',message="密码已被锁定,请24小时后再来尝试!")
                i=3
                break
    else:
        messagebox.showerror(title='wrong',message="该用户还未注册!")
def register():
    # isdigit()方法 检查其参数是否为十进制数字字符
    # isalpha()方法 检测其参数是否只由字母组成
    if not (any([x.isdigit() for x in e1.get()]) and any([x.isalpha() for x in e1.get()]) and special_symbols(e1.get())):
        messagebox.showerror(title='wrong',message='注册失败,用户名格式错误,必须包括字母和数字以及特殊符号')
    elif len(e2.get()) < 6:
        messagebox.showerror(title='wrong',message='注册失败,密码不应少于6位')
    elif e2.get() != e3.get():
        messagebox.showerror(title='wrong',message='注册失败,两次密码不相同')
    elif not(e5.get().isdigit() and len(e5.get()) == 11):
        messagebox.showerror(title='wrong',message='注册失败,请输入正确的11位手机号')
    elif not(len(e6.get()) == 18 and any([x.isdigit() for x in e6.get()]) and id_card(e6.get())):
        # 判断身份证号码是否以'X'结尾
        # str_a.endswith('X')
        messagebox.showerror(title='wrong',message='注册失败,请输入正确的18位身份证号')
    else:
        messagebox.showinfo(title='successful',message='注册成功!欢迎您。新会员')
Button(win,text='注册',height=1,width=3,takefocus=0,state='active',bg='purple',fg='blue',command = register)\
.grid(row=9,column=1)

win.mainloop()

定义id_card函数 规定身份证号码内容信息0~9和x
此处有一个问题当定义string内容为小写字母‘x’时,身份证文本框中输入大写字母‘X’才能注册成功。
反之,当定义string内容为大写字母‘X’时,当身份证文本框中输入小写字母‘x’才能注册成功。
运行示例如下:
注册界面
注册界面

注册密码输入内容错误,弹窗提示所需输入的正确内容信息
注册密码输入内容错误,弹窗提示所需输入的正确内容信息

注册确认密码输入错误,弹窗提示错误信息
注册确认密码输入错误,弹窗提示错误信息

注册联系方式输入错误,弹窗提示所需输入的正确内容信息
注册联系方式输入错误,弹窗提示所需输入的正确内容信息

注册身份证号码输入错误,弹窗提示输入内容的正确内容信息
注册身份证号码输入错误,弹窗提示输入内容的正确内容信息

注册成功提示信息
注册成功提示信息

  • 7
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值