【Python】手把手教你用tkinter设计图书管理登录UI界面(三)

上一篇:【Python】手把手教你用tkinter设计图书管理登录UI界面(二)-CSDN博客

下一篇:

紧接上一篇文章,继续完善项目功能:用户登录。由于老王的注册部分有亿点点复杂,还没完成,但是不影响项目进度,我们可以模拟几个注册的用户来参与项目设计(如下图)。

首先在“图书管理系统项目\user_data”目录下新建“已注册用户数据库.txt”文件用于存储注册用户数据(可以做数据加密写入,解密读取),如下图。

然后在“图书管理系统项目\code”目录下新建“继承登录UI完善功能_2.py”继承“继承登录UI完善功能_1.py”模块来设计。(如下图)

运行结果

导入【图书管理系统项目.code.登录UI】模块
导入【图书管理系统项目.code.继承登录UI完善功能_1】模块
[['最帅周华', '123.com', '10086'], ['秃顶老王', '123456', '10000'], ['法外狂徒张三', 'good_boy', '10010']]

继承登录UI完善功能_2.py

"""继承登录UI完善功能_2 模块
"""# 通配符 '*'
__all__ = ['LoginUI_two']import os, re, time
import tkinter as tk
from tkinter import ttkfrom 图书管理系统项目.code.继承登录UI完善功能_1 import LoginUI_oneclass LoginUI_two(LoginUI_one):"""继承LoginUI,完善登录UI功能"""def __init__(self):"""构造方法"""# 调用LoginUI的构造方法super().__init__()# 完善登录UI功能# 获取已注册的用户数据self.getUserData('..\\user_data\\已注册用户数据库.txt')# 用户登录self.loginButton.config(command=self.userLogin)# self.loginSucceedUI()   # 模拟登录成功# 登录成功(UI)def loginSucceedUI(self):# 登录成功UI窗口设计self.succeedUI = tk.Toplevel(self)      # 顶级窗口self.succeedUI.title('登录成功')          # 窗口标题self.succeedUI.geometry(f'610x406+{self.width//4}+{self.height//8}')self.succeedUI.resizable(0, 0)      # 窗口大小禁止调节self.succeedUI.focus()              # 窗口焦点self.withdraw()                     # 隐藏主窗口(登录UI)# 显示内容tk.Label(self.succeedUI, text='登录成功\n\n发散思维自定义设计', font=(None, 20, 'bold')).pack(fill=tk.BOTH, expand=1)# 显示时钟self.timeVar = tk.StringVar()tk.Label(self.succeedUI, textvariable=self.timeVar, font=(None, 18, 'bold')).place(x=250, y=40)# 登录UI返回self.returnButton = ttk.Button(self.succeedUI, text='返回', command=self.succeedUI_return)self.returnButton.place(x=460, y=350)# 窗口关闭触发self.succeedUI.protocol("WM_DELETE_WINDOW", self.succeedUI_return)self.stopFlag = 1       # 停止显示时钟旗帜self.showTime()         # 显示时钟# 显示时钟def showTime(self):# 循环显示时间while self.stopFlag:self.timeVar.set(time.strftime('%X\n%x\n%A'))self.succeedUI.update()     # 更新窗口time.sleep(0.001)           # 睡眠1毫秒# 登录成功UI返回def succeedUI_return(self):self.deiconify()            # 显示主窗口(登录UI)self.succeedUI.destroy()    # 销毁成功登录UIself.stopFlag = 0           # 停止显示时钟(结束循环)# 初始化数据self.userName.set('')self.password.set('')self.inputVerifyCode.set('')self.showVerifyCode.set('获取验证码')self.showOrConcealCount = 0             # 默认是密码隐藏# 获取已注册的用户数据def getUserData(self, path):# 用户数据容器self.userData = []# 判断文件是否被创建if os.path.exists(path):# 读取已注册用户数据库数据with open(path, encoding='utf-8') as file:for line in file:if line != '\n':self.userData.append(line.split())# print(self.userData)# 用户登录def userLogin(self):# print([self.userName.get(), self.password.get(), self.inputVerifyCode.get(), self.showVerifyCode.get()])# 如果用户数据为空if not self.userData:self.bell()  # 警告声self.hintLabel.config(text='恭喜您是首位用户\n  快来注册体验吧!', background='pink')   # 输入错误提示语self.hintLabel.place(x=228, y=115)  # 显示错误提示标签内容self.update()  # 窗口更新time.sleep(1)  # 睡眠1秒self.hintLabel.place_forget()  # 隐藏错误提示标签内容return# 查找用户名是否已注册for name in self.userData:# 如果已注册if name[0] == self.userName.get():# 验证密码是否正确if name[1] == self.password.get():# 判断验证码是否正确if re.findall(self.showVerifyCode.get(), self.inputVerifyCode.get(), re.I):# 登录成功print('登录成功')self.loginSucceedUI()return# 验证码错误else:self.verifyEntry.focus()    # 设置焦点self.hintLabel.config(text='验证码输入错误', background='red')   # 输入错误提示语break# 密码错误else:self.passwordEntry.focus()  # 设置焦点self.hintLabel.config(text='密码输入错误', background='red')  # 输入错误提示语break# 用户名错误elif name == self.userData[-1]:self.userEntry.focus_set()  # 设置焦点self.hintLabel.config(text='用户名输入错误', background='red')  # 输入错误提示语# 警告声与更新验证码self.bell()  # 警告声self.updateVerifyCode()  # 更新验证码self.hintLabel.place(x=228, y=115)  # 显示错误提示标签内容self.update()       # 窗口更新time.sleep(1)       # 睡眠1秒self.hintLabel.place_forget()   # 隐藏错误提示标签内容# 代码测试
if __name__ == '__main__':ui = LoginUI_two()      # 对象实例化ui.mainloop()           # 窗口主循环
else:print(f'导入【{__name__}】模块')

作者:周华

创作日期:2023/12/10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/212595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙OS应用开发的开发环境

鸿蒙OS应用开发的开发环境 鸿蒙系统发展越来越快,已经开始走进千家万户,从手机到电视机,再到汽车,以后各种手表、智能设备等等。这已经是一个广泛应用的操作系统,也是跟大家生活密切相关的操作系统。要想在这个平台上…

Kubernetes里的DNS;API资源对象ingress;Kubernetes调度;节点选择器NodeSelector;节点亲和性NodeAffinity

Kubernetes里的DNS K8s集群内有一个DNS服务: kubectl get svc -n kube-system |grep dns测试: 在tang3上安装bind-utils,目的是安装dig命令 yum install -y bind-utils apt install dnsutils #ubuntu上 解析外网域名 dig 10.15.0.10 www.baidu.com…

NSSCTF-Crypto靶场练习--第11-20题wp

文章目录 [SWPUCTF 2021 新生赛]traditional[LitCTF 2023]梦想是红色的 (初级)[SWPUCTF 2021 新生赛]crypto2[羊城杯 2021]Bigrsa[LitCTF 2023]Hex?Hex!(初级)[SWPU 2020]happy[AFCTF 2018]BASE[安洵杯 2019]JustBase[鹤城杯 2021]Crazy_Rsa_Tech[SWPUCT…

我们常说的流应用到底是什么?

流应用是DCloud公司开发的一种可以让手机App安装包实现边用边下的技术。基于HTML5规范的即点即用应用,开发者按照HTML5规范开发的应用,可以在支持HTML5流应用的发行渠道实现即点即用的效果。 流应用是基于 HTML5规范的即点即用应用,开发者按照…

Nacos注册中心客户端容灾

目前Nacos客户端有一个FailoverReactor来进行容灾文件的管理,可以通过在指定磁盘文件里写入容灾数据来进行客户端使用数据的覆盖。FailoverReactor目前会拦截Nacos客户端查询接口调用,以getAllInstances接口为例,目前FailoverReactor的工作流…

【合集】SpringBoot——Spring,SpringBoot,SpringCloud相关的博客文章合集

前言 本篇博客是spring相关的博客文章合集,内容涵盖Spring,SpringBoot,SpringCloud相关的知识,包括了基础的内容,比如核心容器,springMVC,Data Access;也包括Spring进阶的相关知识&…

免费的网页数据抓取工具有哪些?【2024附下载链接】

在网络上,有许多网页数据抓取工具可供选择。本文将探讨其如何全网采集数据并支持指定网站抓取。我们将比较不同的数据采集工具,帮助您找到最适合您需求的工具。 网页数据抓取工具种类 在选择网页数据抓取工具之前,让我们先了解一下这些工具…

[ 蓝桥杯Web真题 ]-布局切换

目录 介绍 准备 目标 规定 思路 解法参考 介绍 经常用手机购物的同学或许见过这种功能,在浏览商品列表的时候,我们通过点击一个小小的按钮图标,就能快速将数据列表在大图(通常是两列)和列表两种布局间来回切换。…

电机:有刷直流电机的原理

一、什么是有刷直流电机 直流有刷电机(Brushed DC Motor),定子是用永磁铁或者线圈做成,以形成固定磁场。在定子一端上有固定碳刷,或者铜刷,负责把外部电流引入转子线圈。而转子是由线圈构成,线…

邮件营销软件:10个创新邮件营销策略,提升投资回报率(一)

电子商务和电子邮件营销密不可分。尽管电子商务在蓬勃发展,而很多人对邮件营销颇有微词。但是在电子商务中,邮件营销的确是一种有效营销方式。在本文中,我们将讨论一下邮件营销在电子商务中的有效运用,帮助您的企业在今年尽可能地…

2023-12-05 Qt学习总结6

点击 <C 语言编程核心突破> 快速C语言入门 Qt学习总结 前言十八 QMessageBox消息对话框十九 Qt布局管理总结 前言 要解决问题: 学习qt最核心知识, 多一个都不学. 十八 QMessageBox消息对话框 QMessageBox消息对话框是Qt中的一个提供用户交互界面的对话框窗口。 它通常…

MyBatis 四大核心组件之 ParameterHandler 源码解析

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

【图片版】计算机组成原理考前复习题【第2章 运算方法和运算器-1】

目录 前言 考前复习题&#xff08;必记&#xff09; 结尾 前言 在计算机组成原理的学习过程中&#xff0c;我们深入探索了计算机系统概述这一重要领域。计算机系统作为现代科技的核心&#xff0c;是整个计算机科学的基石。我们将学到的知识与理论转化为了能够解决现实问题的…

Python+unittest+requests接口自动化测试框架搭建 完整的框架搭建过程

首先配置好开发环境&#xff0c;下载安装Python并下载安装pycharm&#xff0c;在pycharm中创建项目功能目录。如果不会的可以百度Google一下&#xff0c;该内容网上的讲解还是比较多比较全的&#xff01; 大家可以先简单了解下该项目的目录结构介绍&#xff0c;后面会针对每个文…

docker 可视化工具操作说明 portainer

官网地址 https://docs.portainer.io/start/install-ce/server/docker/linux 1.First, create the volume that Port docker volume create portainer_data2.下载并安装容器 docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restartalways -v /var/run/docker…

PWN动态调试

这篇文章就是来教大家学习怎么动态调试的&#xff0c;然后我还写了一篇关于动态调试的文章&#xff0c;不是buu上面的题&#xff0c;就是两道简单的栈溢出问题&#xff0c;那两道题挺有特点的。大家可以去看看。 每日3道PWN之课外2道&#xff08;第2.5天&#xff09;-CSDN博客 …

性能监控体系:InfluxDB Grafana Prometheus

InfluxDB 简介 什么是 InfluxDB &#xff1f; InfluxDB 是一个由 InfluxData 开发的&#xff0c;开源的时序型数据库。它由 Go 语言写成&#xff0c;着力于高性能地查询与存储时序型数据。 InfluxDB 被广泛应用于存储系统的监控数据、IoT 行业的实时数据等场景。 可配合 Te…

SSD基础架构与NAND IO并发问题探讨

在我们的日常生活中&#xff0c;我们经常会遇到一些“快如闪电”的事物&#xff1a;比如那场突如其来的雨、那个突然出现在你眼前的前任、还有就是今天我们要聊的——固态硬盘&#xff08;SSD&#xff09;。 如果你是一个技术宅&#xff0c;或者对速度有着近乎偏执的追求&…

【Qt开发流程】之容器类1:介绍及常用容器类和使用Java风格迭代器进行遍历

概述 Qt库提供了一组通用的基于模板的容器类。这些类可用于存储指定类型的项。例如&#xff0c;如果需要一个可调整大小的QString数组&#xff0c;可以使用QVector<QString>。 这些容器类被设计成比STL容器更轻、更安全、更易于使用。如果不熟悉STL&#xff0c;或者更喜…

低多边形3D建模石头材质纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…