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中的字典详细介绍
Sep 18 Python
用Python计算三角函数之atan()方法的使用
May 15 Python
python安装oracle扩展及数据库连接方法
Feb 21 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
200 行python 代码实现 2048 游戏
Jan 12 Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
pandas DataFrame创建方法的方式
Aug 02 Python
python3的UnicodeDecodeError解决方法
Dec 20 Python
PyTorch的自适应池化Adaptive Pooling实例
Jan 03 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 Python
Python借助with语句实现代码段只执行有限次
Mar 23 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中函数的形参与实参的问题说明
2010/09/01 PHP
PHP采集利器 Snoopy 试用心得
2011/07/03 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
php socket通信简单实现
2016/11/18 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
学习JavaScript设计模式(多态)
2015/11/25 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
简单了解JavaScript作用域
2020/07/31 Javascript
jquery实现简单每周轮换的日历
2020/09/10 jQuery
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
python和c语言的主要区别总结
2019/07/07 Python
Series和DataFrame使用简单入门
2019/11/13 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
物流仓管员工作职责
2014/01/06 职场文书
初中政治教学反思
2014/01/17 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
科长个人四风问题整改措施思想汇报
2014/10/13 职场文书
银行授权委托书样本
2014/10/13 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
小学入学感言
2015/08/01 职场文书
django中websocket的具体使用
2022/01/22 Python
Vue Element plus使用方法梳理
2022/12/24 Vue.js