【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.hqwc.cn/news/263993.html

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

相关文章

一款基于ESP32的迷你四足机器人

一、软件介绍 增加自定义动作模式,可以在小程序中自定义一个最多10个步骤的动作。 附件中:带自定模式固件bin.zip esp32c3固件文件 烧录下图设置 无串口版本esp32c3开发板烧录前先按住BOOT键再插线进入烧录模式,LoadMode选择USB。 二、AP…

第 375 场 LeetCode 周赛题解

A 统计已测试设备 模拟&#xff1a;记录当前已测试设备数量 class Solution { public:int countTestedDevices(vector<int> &batteryPercentages) {int res 0;int s 0;for (auto x: batteryPercentages) {if (x - s > 0) {res;s;}}return res;} };B 双模幂运算 …

Promise与async/await的简单介绍

在 JavaScript 中&#xff0c;处理异步操作一直是开发者们面临的挑战之一。传统的回调函数方式往往导致代码难以维护、可读性差、易产生回调地狱等问题。为了解决这些问题&#xff0c;出现了 Promise 和 Async/Await 这两种处理异步操作的方式。 一、异步产生问题示例 当我们…

Gilisoft Video Editor——迈出剪辑的第一步

今天博主分享的是又一款剪辑软件——视频剪辑手&#xff08;GiliSoft Video Editor&#xff09;&#xff0c;对剪辑视频感兴趣的小伙伴千万不要错过。这是一款专门用于视频剪辑的软件&#xff0c;功能比较简单&#xff0c;相比于专业的pr是比不了的&#xff0c;但是制作一些简单…

Vue 创建虚拟DOM元素的几种方式和实际应用。

目录 创建虚拟DOM元素的方式 创建一个简单的元素&#xff1a; 创建一个带有属性的元素&#xff1a; 创建一个带有子元素的元素&#xff1a; 创建一个带有事件监听器的元素&#xff1a; 创建一个Vue组件 创建一个带Props的组件 创建一个带Slot的组件 实际应用 创建虚…

gma 空间绘图实战(1):绘制多个子图,连接并展示局部放大区域

安装 gma&#xff1a;pip install gma 本文基于&#xff1a;gma 2.0.3&#xff0c;Python 3.10 本文用到的矢量数据为&#xff1a;CTAmap 1.12。来源于 https://www.shengshixian.com/ 。&#xff08;感谢锐多宝&#xff09; 绘图目标 参考代码 import matplotlib.pyplot as p…

jQuery 选择器全部详细笔记

目录 JQuery全部详细笔记-上 jQuery 选择器 jQuery 选择器介绍 jQuery 选择器的优点 代码演示 基本选择器 ● 基本选择器应用实例 程序运行图 层次选择器 ● 层次选择器应用实例 代码演示 表单选择器 ● 表单选择器基本介绍 代码演示 综合代码示例 网页中所有的…

【FMCW毫米波雷达设计 】 — FMCW波形

原书&#xff1a;FMCW Radar Design 1 引言 本章研究驱动FMCW雷达的主要波形:线性调频(LFM)波形。我们研究信号的行为及其性质。随后&#xff0c;本章讨论了匹配滤波理论&#xff0c;并研究了压缩这种波形的技术&#xff0c;特别是所谓的拉伸处理&#xff0c;它赋予FMCW雷达极…

【网络奇缘系列】计算机网络|数据通信方式|数据传输方式

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏: 一见倾心,再见倾城 --- 计算机网络~&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 这篇文章是关于计算机网络中数据通信的基础知识点&#xff0c; 从模型&#xff0c;术语再到数据通信方式&#…

小目标检测模型设计的一点思考

1. 小目标的特性 目标之间的交叠概率比较低&#xff0c;即使有交叠&#xff0c;其IoU多数情况下也是比较小的 AI-TOD Tiny Person Dateset 小目标自身的纹理显著度有强弱区别&#xff0c;但是总体来说纹理特征都较弱&#xff0c;很多时候需要借助一定的图像上下文来帮助确认 …

IDEA远程调试与JDWP调试端口RCE漏洞

文章目录 前言Docker远程调试Java调试原理远程调试实践 JDWP端口RCE调试端口探测调试端口利用 总结 前言 在对一些 Java CVE 漏洞的调试分析过程中&#xff0c;少不了需要搭建漏洞环境的场景&#xff0c;但是本地 IDEA 搭建的话既麻烦&#xff08;通过 pom.xml 导入各种漏洞组…

【BUG】微信小程序扫码获取不到scene参数的bug修复

问题描述&#xff1a; 扫码后获取不到scene&#xff0c;必须点击“重新进入小程序”才可以 错误原因&#xff1a; 微信小程序的二维码扫描分为两种情况&#xff1a; 冷启动&#xff1a;当用户首次扫描二维码或在后台无该小程序运行实例时打开小程序&#xff0c;此时可以通过…