【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.pswp.cn/news/212595.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212595.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212595.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ngixn 準備

確認yum可用,確認防火墻,確認SELinux 一項安裝 yum -y install gcc make automake pcre-devel zlib zlib-devel openssl openssl-devel參數: gcc:編譯依賴gcc環境 pcre:PCRE(Perl Compatible Regular Expressions)是一…

鴻蒙OS應用開發的開發環境

鴻蒙OS應用開發的開發環境 鴻蒙系統發展越來越快,已經開始走進千家萬戶,從手機到電視機,再到汽車,以后各種手表、智能設備等等。這已經是一個廣泛應用的操作系統,也是跟大家生活密切相關的操作系統。要想在這個平臺上…

Git命令---查看遠程倉庫

介紹 使用git命令查看綁定的遠程倉庫。 命令 git remote -v

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…

順序表的應用

1. 順序表 1.1 寫法1 Linear_Opeartor2.c #include "stdio.h" #include "stdlib.h" #include "stdbool.h" #include "string.h" //順序表//申明順序表的大小 #define MAXSIZE 5 typedef bool status; //創建順序表 int *Linear_Creat…

DockerFile中途執行出錯的解決辦法

DockerFile中途執行出錯的解決辦法 你們是否也曾經因為DockerFile中途執行出錯,而對其束手無策?總是對docker避之不及! 但是當下載的源碼運用到了docker,dockerFile 執行到一半,報錯了怎么辦? 現狀 那么當DockerFile執行一半出錯后,會產生什么結果呢? 如圖可知,生成…

我們常說的流應用到底是什么?

流應用是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附下載鏈接】

在網絡上,有許多網頁數據抓取工具可供選擇。本文將探討其如何全網采集數據并支持指定網站抓取。我們將比較不同的數據采集工具,幫助您找到最適合您需求的工具。 網頁數據抓取工具種類 在選擇網頁數據抓取工具之前,讓我們先了解一下這些工具…

TC397 EB MCAL開發從0開始系列 之 [21.2] FlsLoader配置實戰 - 擦除讀寫Pflash

一、FlsLoader配置1、配置目標2、目標依賴2.1 硬件使用2.2 軟件使用2.3 新增模塊3、EB配置3.1 配置講解3.2 模塊配置3.2.1 MCU配置3.2.2 PORT配置3.2.3 FlsLoader配置3.2.5 Irq配置3.2.6 ResourceM配置4、ADS代碼編寫及調試<

[ 藍橋杯Web真題 ]-布局切換

目錄 介紹 準備 目標 規定 思路 解法參考 介紹 經常用手機購物的同學或許見過這種功能&#xff0c;在瀏覽商品列表的時候&#xff0c;我們通過點擊一個小小的按鈕圖標&#xff0c;就能快速將數據列表在大圖&#xff08;通常是兩列&#xff09;和列表兩種布局間來回切換。…

電機:有刷直流電機的原理

一、什么是有刷直流電機 直流有刷電機&#xff08;Brushed DC Motor&#xff09;&#xff0c;定子是用永磁鐵或者線圈做成&#xff0c;以形成固定磁場。在定子一端上有固定碳刷&#xff0c;或者銅刷&#xff0c;負責把外部電流引入轉子線圈。而轉子是由線圈構成&#xff0c;線…

郵件營銷軟件:10個創新郵件營銷策略,提升投資回報率(一)

電子商務和電子郵件營銷密不可分。盡管電子商務在蓬勃發展&#xff0c;而很多人對郵件營銷頗有微詞。但是在電子商務中&#xff0c;郵件營銷的確是一種有效營銷方式。在本文中&#xff0c;我們將討論一下郵件營銷在電子商務中的有效運用&#xff0c;幫助您的企業在今年盡可能地…

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…