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中的list列表数据结构用法
Mar 12 Python
Python实现JSON反序列化类对象的示例
Jan 31 Python
Python做智能家居温湿度报警系统
Sep 25 Python
对python 命令的-u参数详解
Dec 03 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
pytorch GAN伪造手写体mnist数据集方式
Jan 10 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
Feb 13 Python
浅析matlab中imadjust函数
Feb 27 Python
python MultipartEncoder传输zip文件实例
Apr 07 Python
Python3接口性能测试实例代码
Jun 20 Python
python爬虫之利用selenium模块自动登录CSDN
Python数据清洗工具之Numpy的基本操作
Python基础之Socket通信原理
python numpy中setdiff1d的用法说明
Apr 22 #Python
一行代码python实现文件共享服务器
Apr 22 #Python
python数据分析之用sklearn预测糖尿病
python文件名批量重命名脚本实例代码
You might like
国内php原创论坛
2006/10/09 PHP
PHP删除HTMl标签的三种解决方法
2013/06/30 PHP
php处理restful请求的路由类分享
2014/02/27 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
js返回上一页并刷新代码整理
2012/12/21 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
基于jQuery的AJAX和JSON实现纯html数据模板
2016/08/09 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
python通过post提交数据的方法
2015/05/06 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
利用python实现冒泡排序算法实例代码
2019/12/01 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
巴基斯坦购物网站:Goto
2019/03/11 全球购物
Javascript如何发送一个Ajax请求
2015/01/26 面试题
求职自荐信怎么写
2014/03/06 职场文书
信息总监管理职责范本
2014/03/08 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python