Python中tkinter的用户登录管理的实现


Posted in Python onApril 22, 2021

内容

编写一个用户登录管理程序,设计窗体的布局,制定密码规则和验证码规则。要求使用 Python 标准库 tkinter 编写基于GUI 的用户登录窗体。通过该窗体,用户输入用户名、密码和验证码等信息,确认登录后需要判断用户信息是否合法,并弹出对应的反馈信息。通过判断用户是否在用户信息中,以及输入密码是否与用户信息文件中用户名所对应的密码是否相同,来判断用户是否合法。此外,新用户还可以进行注册,注册需要输入用户名、密码、手机号和身份证号等信息。注册时密码需要遵循一定规则(长度不小于8且含有数字、字母和特殊字符),注册后将用户信息存储到文件中,更新用户信息文件。步骤

Python中tkinter的用户登录管理的实现

代码

from tkinter import *
from tkinter import messagebox
import os
import xlrd
from xlutils.copy import copy

login=Tk()
login.title('登录界面')
# 设计窗口大小
login.geometry('210x200')

# 设计GUI用户登录窗体
Label(login,text="用户登录").grid(row=0,column=0,columnspan=2)
Label(login,text="用户名").grid(row=1,column=0)
name=Entry(login)
name.grid(row=1,column=1)
Label(login,text="密码:").grid(row=2,column=0)
passWord=Entry(login,show='●')
passWord.grid(row=2,column=1)
Label(login,text="验证码:").grid(row=3,column=0,sticky=E)
verifyCode=Entry(login)
verifyCode.grid(row=3,column=1)

# 判断用户是否在用户信息.xls文件中
def isInExcel(data):
    filename = "用户信息.xls"
    excel = xlrd.open_workbook(filename, encoding_override="utf-8")
    sheet = excel.sheets()[0]

    sheet_row_mount = sheet.nrows # 行数
    sheet_col_mount = sheet.ncols # 列数

    sheet_name = []
    # 所有用户名信息
    for x in range(1, sheet_row_mount):
        y = 0
        sheet_name.append(sheet.cell_value(x, y))

    for x in sheet_name:
        # 找到用户名
        if (data == x):
            # 已有用户
            return 1
            break;
    # 未注册用户
    return -1

# 用户存在时,判断密码是否正确
def isPasswordDirect(data,passWord):
    filename = "用户信息.xls"
    excel = xlrd.open_workbook(filename, encoding_override="utf-8")
    sheet = excel.sheets()[0]

    sheet_row_mount = sheet.nrows # 行数
    sheet_col_mount = sheet.ncols # 列数

    sheet_name = []
    # 所有用户名信息
    for x in range(1, sheet_row_mount):
        y = 0
        sheet_name.append(sheet.cell_value(x, y))
    sheet_passWord=[]
    # 所有密码信息
    for x in range(1, sheet_row_mount):
        y = 1
        sheet_passWord.append(sheet.cell_value(x, y))

    for i in range(len(sheet_name)):
        if(data==sheet_name[i]):
            # 记录用户名在数组中的位置
            record=i
            break

    for i in range(len(sheet_passWord)):
        if(passWord==sheet_passWord[i]):
            # 判断用户名位置与密码位置是否相同
            # 以及密码是否与用户信息中的密码一致
            if(i==record):
                # 密码正确
                return 1
                break
    # 密码错误
    return -1

def successful():
    # 判断用户名不存在
    if (isInExcel(name.get())==-1):
        messagebox.showerror(title='wrong', message='用户不存在,请注册')
    # 密码不正确
    elif (isPasswordDirect(name.get(),passWord.get())==-1):
        messagebox.showerror(title='wrong', message='密码不正确')
    # 验证码位数不正确
    elif len(verifyCode.get())!=4:
        messagebox.showerror(title='wrong',message='验证码应为4位')
    else:
        messagebox.showinfo(title='successful',message='登录成功')
Button(login, text='发送验证码').grid(row=4, column=0, columnspan=3)
Button(login,text='登录',command=successful).grid(row=5,column=0,columnspan=3)

# 设计用户注册GUI界面
def registereds():
    registered=Tk()
    registered.title('registered')
    registered.geometry('230x185')
    Label(registered, text='用户注册').grid(row=0, column=0, columnspan=2)
    Label(registered, text='用户名:').grid(row=1, column=0, sticky=E)
    names = Entry(registered)
    names.grid(row=1, column=1)
    Label(registered, text='密码:').grid(row=2, column=0, sticky=E)
    passwds = Entry(registered, show='●')
    passwds.grid(row=2, column=1)
    Label(registered, text='确认密码:').grid(row=3, column=0)
    repasswd = Entry(registered, show='●')
    repasswd.grid(row=3, column=1)
    Label(registered, text='手机号:').grid(row=4, column=0, sticky=E)
    phonenum = Entry(registered)
    phonenum.grid(row=4, column=1)
    Label(registered, text='身份证号:').grid(row=5, column=0)
    man = Entry(registered)
    man.grid(row=5, column=1)

    # 判断是否含有特殊符号
    def teshufuhao(input_psd):
        string = "~!@#$%^&*()_+-*/<>,.[]\/"
        for i in string:
            if i in input_psd:
                return True
        return False

    def registeredes():
        # 密码长度小于8
        if len(passwds.get()) < 8:
            messagebox.showerror(title='wrong', message='注册失败,密码不应少于8位')
        # 密码不同时含有数字、字母和特殊符号
        elif not (any([x.isdigit() for x in passwds.get()]) and any([x.isalpha() for x in passwds.get()]) and teshufuhao(
                passwds.get())):
            messagebox.showerror(title='wrong', message='注册失败,密码格式错误,必须包括字母和数字以及特殊符号')
        # 两次密码输入不一样
        elif passwds.get() != repasswd.get():
            messagebox.showerror(title='wrong', message='注册失败,两次密码不相同')
        # 手机号不正确
        elif not (phonenum.get().isdigit() and len(phonenum.get()) == 11):
            messagebox.showerror(title='wrong', message='注册失败,请输入正确的11位手机号')
        # 身份证号不正确
        elif len(man.get()) != 18:
            messagebox.showerror(title='wrong', message='注册失败,请输入正确的18位身份证号')
        else:
            messagebox.showinfo(title='successful', message='注册成功!')
            # 将新用户信息存入用户信息文件
            excel = xlrd.open_workbook('用户信息.xls')
            sheet = excel.sheets()[0]

            nrow = sheet.nrows # 文件行数

            wb = copy(excel)
            w_sheet = wb.get_sheet(0)
            # 从数据下一行开始写入新用户信息
            w_sheet.write(nrow, 0, names.get())
            w_sheet.write(nrow, 1, repasswd.get())
            w_sheet.write(nrow, 2, phonenum.get())
            w_sheet.write(nrow, 3, man.get())

            wb.save('用户信息.xls')

    Button(registered, text='注册', command=registeredes).grid(row=6, column=0, columnspan=3)


Button(login, text='注册', command=registereds).grid(row=6, column=0, columnspan=3)
login.mainloop()

结果

(1)密码正确(对照用户信息文件输入密码),结果显示登录成功

Python中tkinter的用户登录管理的实现

Python中tkinter的用户登录管理的实现

(2)密码不正确,结果显示密码不正确

Python中tkinter的用户登录管理的实现

(3)密码正确,验证码位数不对

Python中tkinter的用户登录管理的实现

(4)用户名不存在

Python中tkinter的用户登录管理的实现

5. 注册新用户

(1)新用户写入用户信息文件

Python中tkinter的用户登录管理的实现

Python中tkinter的用户登录管理的实现

(2)再次登录,用户登录成功

Python中tkinter的用户登录管理的实现

到此这篇关于Python中tkinter的用户登录管理的实现的文章就介绍到这了,更多相关tkinter用户登录管理内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
Python内置模块turtle绘图详解
Dec 09 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
Jan 11 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
用python与文件进行交互的方法
Mar 01 Python
Python实现图片拼接的代码
Jul 02 Python
python实现简单加密解密机制
Mar 19 Python
Python增强赋值和共享引用注意事项小结
May 28 Python
pd.DataFrame统计各列数值多少的实例
Dec 05 Python
keras CNN卷积核可视化,热度图教程
Jun 22 Python
python FTP编程基础入门
Feb 27 Python
python爬虫之利用selenium模块自动登录CSDN
Python数据清洗工具之Numpy的基本操作
Python基础之Socket通信原理
python numpy中setdiff1d的用法说明
Apr 22 #Python
一行代码python实现文件共享服务器
Apr 22 #Python
python数据分析之用sklearn预测糖尿病
python文件名批量重命名脚本实例代码
You might like
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
PHP 类型转换函数intval
2009/06/20 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
php和javascript之间变量的传递实现代码
2012/12/19 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
美国球鞋寄卖网站:Stadium Goods
2018/05/09 全球购物
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
英国工作场所设备购买网站:Slingsby
2019/05/03 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
法律工作求职自荐信
2013/10/31 职场文书
爱岗敬业演讲稿范文
2014/01/14 职场文书
家长给小学生的评语
2014/01/30 职场文书
升旗仪式主持词
2014/03/19 职场文书
三爱活动实施方案
2014/03/19 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
计划生育证明书写要求
2014/09/17 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书