如何用python做一個用戶登錄界面——潯川python社

1 需解決的問題:

? 1.1如何用python做一個用戶登錄界面?

? 1.2需要用到哪些庫、模塊?

2 問題解決:

? 2.1 回答 1.1 :合理即可,無標準回答。

? 2.2 回答 1.2 :tk庫(縮寫)、GUL界面、tkinter。messagebox模塊......

3 代碼展示:?

# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.messagebox
import pickle
import random# 窗口
window = tk.Tk()
window.title('歡迎進入python')
window.geometry('450x200')
# 畫布放置圖片
# canvas=tk.Canvas(window,height=300,width=500)
# imagefile=tk.PhotoImage(file='qm.png')
# image=canvas.create_image(0,0,anchor='nw',image=imagefile)
# canvas.pack(side='top')
# 標簽 用戶名密碼
Verification_Code = random.randint(1000, 9999)#設置一個隨機的四位數
Verification_Code = str(Verification_Code)#把類型轉換為str型
print(type(Verification_Code))
tk.Label(window, text='用戶名:').place(x=100, y=30)
tk.Label(window, text='密碼:').place(x=100, y=70)
tk.Label(window, text='驗證碼').place(x=100, y=110)
tk.Label(window, text=Verification_Code).place(x=320, y=110)
# 用戶名輸入框
var_usr_name = tk.StringVar()
entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
entry_usr_name.place(x=160, y=30)
# 密碼輸入框
var_usr_pwd = tk.StringVar()
entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
entry_usr_pwd.place(x=160, y=70)
#驗證碼輸入框
var_usr_yzm = tk.StringVar()
entry_usr_yzm = tk.Entry(window, textvariable=var_usr_yzm)
entry_usr_yzm.place(x=160, y=110)# 登錄函數
def usr_log_in():# 輸入框獲取用戶名密碼usr_name = var_usr_name.get()usr_pwd = var_usr_pwd.get()usr_yzm = var_usr_yzm.get()#測試類型print(type(usr_yzm),type(Verification_Code))# 從本地字典獲取用戶信息,如果沒有則新建本地數據庫try:with open('usr_info.pickle', 'rb') as usr_file:usrs_info = pickle.load(usr_file)except FileNotFoundError:with open('usr_info.pickle', 'wb') as usr_file:usrs_info = {'admin': 'admin'}pickle.dump(usrs_info, usr_file)# 判斷驗證碼是否正確用戶名和密碼是否匹配if usr_yzm == Verification_Code:if usr_name in usrs_info:if usr_pwd == usrs_info[usr_name]:tk.messagebox.showinfo(title='welcome',message='歡迎您:' + usr_name)else:tk.messagebox.showerror(message='密碼錯誤')# 用戶名密碼不能為空elif usr_name == '' or usr_pwd == '':tk.messagebox.showerror(message='用戶名或密碼為空')# 不在數據庫中彈出是否注冊的框else:is_signup = tk.messagebox.askyesno('歡迎', '您還沒有注冊,是否現在注冊')if is_signup:usr_sign_up()elif usr_yzm == '':tk.messagebox.showerror(message='驗證碼不能為空')else:tk.messagebox.showerror(message='驗證碼有誤!')# 注冊函數
def usr_sign_up():# 確認注冊時的相應函數def signtowcg():# 獲取輸入框內的內容nn = new_name.get()np = new_pwd.get()npf = new_pwd_confirm.get()# 本地加載已有用戶信息,如果沒有則已有用戶信息為空try:with open('usr_info.pickle', 'rb') as usr_file:exist_usr_info = pickle.load(usr_file)except FileNotFoundError:exist_usr_info = {}# 檢查用戶名存在、密碼為空、密碼前后不一致if nn in exist_usr_info:tk.messagebox.showerror('錯誤', '用戶名已存在')elif np == '' or nn == '':tk.messagebox.showerror('錯誤', '用戶名或密碼為空')elif np != npf:tk.messagebox.showerror('錯誤', '密碼前后不一致')# 注冊信息沒有問題則將用戶名密碼寫入數據庫else:exist_usr_info[nn] = npwith open('usr_info.pickle', 'wb') as usr_file:pickle.dump(exist_usr_info, usr_file)tk.messagebox.showinfo('歡迎', '注冊成功')# 注冊成功關閉注冊框window_sign_up.destroy()# 新建注冊界面window_sign_up = tk.Toplevel(window)window_sign_up.geometry('350x200')window_sign_up.title('注冊')# 用戶名變量及標簽、輸入框new_name = tk.StringVar()tk.Label(window_sign_up, text='用戶名:').place(x=10, y=10)tk.Entry(window_sign_up, textvariable=new_name).place(x=150, y=10)# 密碼變量及標簽、輸入框new_pwd = tk.StringVar()tk.Label(window_sign_up, text='請輸入密碼:').place(x=10, y=50)tk.Entry(window_sign_up, textvariable=new_pwd, show='*').place(x=150, y=50)# 重復密碼變量及標簽、輸入框new_pwd_confirm = tk.StringVar()tk.Label(window_sign_up, text='請再次輸入密碼:').place(x=10, y=90)tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*').place(x=150, y=90)# 確認注冊按鈕及位置bt_confirm_sign_up = tk.Button(window_sign_up, text='確認注冊',command=signtowcg)bt_confirm_sign_up.place(x=150, y=130)# 退出的函數
def usr_sign_quit():window.destroy()# 登錄 注冊按鈕
bt_login = tk.Button(window, text='登錄', command=usr_log_in)
bt_login.place(x=140, y=150)
bt_logup = tk.Button(window, text='注冊', command=usr_sign_up)
bt_logup.place(x=210, y=150)
bt_logquit = tk.Button(window, text='退出', command=usr_sign_quit)
bt_logquit.place(x=280, y=150)
# 主循環
window.mainloop()

?3.1 代碼運行結果展示:

需注意:如果是未注冊用戶,系統會提示用戶先注冊在登錄。如是已注冊用戶,可以直接登錄。

注冊頁面:

填寫完之后,點擊“確認注冊”系統會彈出一個“注冊成功”的彈窗。

4 總結 :

這段代碼是一個簡單的登錄注冊系統的實現,使用了tkinter庫進行圖形化界面的開發。

  1. 首先導入了tkinter庫以及其他需要的模塊(tkinter.messagebox、pickle、random);
  2. 創建一個窗口,并設置標題和大小;
  3. 在窗口中添加了用戶名、密碼、驗證碼等標簽和輸入框;
  4. 定義了登錄函數(usr_log_in)和注冊函數(usr_sign_up);
  5. 登錄函數中首先獲取用戶輸入的用戶名、密碼和驗證碼,并從本地數據庫中讀取用戶信息;
  6. 判斷驗證碼是否正確,如果正確則繼續判斷用戶名和密碼是否匹配,如果不匹配則彈出密碼錯誤提示框;
  7. 如果用戶名存在但密碼為空,則彈出用戶名或密碼為空的提示框;
  8. 如果用戶名不存在,則彈出是否注冊的提示框,用戶選擇注冊后調用注冊函數;
  9. 注冊函數中創建了一個新窗口,并添加了用戶名、密碼和確認密碼的輸入框;
  10. 確認注冊后首先檢查用戶名是否已存在,如果存在則彈出用戶名已存在的錯誤提示框;
  11. 如果密碼為空或用戶名為空,則彈出用戶名或密碼為空的錯誤提示框;
  12. 如果兩次輸入的密碼不一致,則彈出密碼前后不一致的錯誤提示框;
  13. 如果注冊信息沒有問題,則將用戶名和密碼寫入本地數據庫,并彈出注冊成功的提示框;
  14. 最后添加了登錄、注冊、退出按鈕,并通過按鈕的command屬性調用相關的函數;
  15. 進入主循環,等待用戶交互。

需要注意的地方:

  • 該程序使用了pickle模塊來讀寫本地數據庫usr_info.pickle,該文件保存了用戶名和密碼的字典;
  • 驗證碼使用了random模塊生成一個四位數,作為用戶登錄時的驗證碼,用戶需要輸入相同的驗證碼才能登錄成功;
  • 程序使用了tkinter.messagebox模塊彈出提示框。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20902.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20902.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20902.shtml

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

相關文章

C++20實戰之channel

C20實戰之channel 繼前面兩節的直播,講解了thread、jthread、stop_token、stop_source、stop_callback、cv、cv_any等的用法與底層實現,那么如何基于這些知識實現一個小項目呢? 于是引出了這篇,寫一個channel出來。 注&#xff1a…

【算法】快速冪

算法-快速冪 前置知識 倍增 思路 我們要求 a n a^n an。 簡單的方法是 a n a n ? 1 ? a a^na^{n-1}\cdot a anan?1?a 但是我們不妨使用倍增的思想 若 2 ∣ n 2\mid n 2∣n,則 a n a n 2 2 a^n{a^{\frac n 2}}^2 ana2n?2 若 2 ? n 2\nmid n 2?n&…

【AI】設計師人人必備的Ai課程,AIGC實戰教學

課程介紹 專為設計師定制的AI繪畫視覺課程,包含排版、插畫、海報和動漫等。共43節課程,2.06G視頻,教授AI應用技巧,提高設計效率和質量。內容涵蓋詞生圖方法、AI風格設計等,幫助學員在設計領域取得成就。 1_01-ai課程…

Flutter 中的 SliverPersistentHeader 小部件:全面指南

Flutter 中的 SliverPersistentHeader 小部件:全面指南 Flutter 是一個功能強大的 UI 工具集,用于創建美觀、高性能的移動和 web 應用。在 Flutter 的滾動組件中,SliverPersistentHeader 是一個特殊的組件,它用于在 CustomScroll…

zustand修改一個object對象的嵌套屬性,會觸發更新嗎

在 Zustand 狀態管理庫中,當使用 set 方法來更新一個對象的嵌套屬性時,并不會觸發整個對象的更新操作。相反,Zustand 使用了淺比較來檢測狀態的變化,只有當狀態內部的引用發生變化時,才會觸發更新操作。 因此&#xf…

jrt落地deepin

經過昨天一晚上的努力,把deepin和win10的雙系統安裝好了。同時把jrt開發需要的svn,jdk,idea安裝好里,代碼也checkout里。 首先安裝系統碰到安裝deepin后啟動時候無法選擇win10,在宏偉兄幫助下找到資料執行sudo update-grub解決了。 然后程…

糖果促銷【百度之星】/思維

糖果促銷 思維 大佬的解法&#xff1a; #include<bits/stdc.h> using namespace std; typedef long long ll; int main() {ll t;cin>>t;for(int i0;i<t;i){ll p,k;cin>>p>>k;if(k0) cout<<0<<endl;else{k-(k-1)/p;cout<<k<…

v-for中key的作用

v-for中key的作用 例如我們用v-for渲染一個列表[1, 2, 4 ,5]&#xff0c;然后在中間插入一個3變成[1,2,3,4,5]。v-for寫了key和沒有寫key&#xff0c;Vue是怎么處理的呢&#xff1f; Vue對有key的會調用patchKeyedChildren方法&#xff1b;沒有key的調用patchUnkeyedChildren方…

Vue3 -Computed計算屬性

前言&#xff1a; Computed屬性屬于Vue3中的響應式核心(與之共同說明的還有ref&#xff0c;reactive&#xff0c;watch...) 接受一個 getter 函數&#xff0c;返回一個只讀的響應式 ref 對象。該 ref 通過 .value 暴露 getter 函數的返回值。它也可以接受一個帶有 get 和 set…

AI搜索,圍攻百度

圖片&#xff5c;電影《雙子殺手》截圖 ©自象限原創 作者丨程心 國內的大模型廠商落地C端&#xff0c;都盯上了AI搜索。 隨著5月30號&#xff0c;騰訊宣布推出基于混元大模型的APP“騰訊元寶”&#xff0c;并基于搜狗搜索引擎&#xff0c;上線AI搜索功能。幾乎當下所有…

【Qt】Qt Style Sheets (QSS) 指南:打造個性化用戶界面

文章目錄 前言&#xff1a;1. QSS 選擇器2. 子控件選擇器&#xff08;Sub-Controls&#xff09;2.1. 示例&#xff1a;給 QComboBox 給下拉按鈕加上圖標2.2. 示例&#xff1a;修改進度條顏色 3. 偽類選擇器3.1. 代碼示例: 設置按鈕的偽類樣式.3.2. 代碼示例: 使用事件方式實現同…

數模混合芯片設計中的修調技術是什么?

一、修調目的 數模混合芯片需要修調技術主要是因為以下幾個原因&#xff1a; 工藝偏差&#xff08;Process Variations&#xff09;&#xff1a; 半導體制造過程中存在不可避免的工藝偏差&#xff0c;如晶體管尺寸、閾值電壓、電阻和電容值等&#xff0c;這些參數的實際值與…

阿里云計算之linux入門命令學習筆記(三)

Linux 提供了豐富的命令行工具&#xff0c;用于系統管理、文件操作、網絡管理、進程控制等。以下是一些常用的 Linux 命令及其簡要說明&#xff1a; 切換用戶 su 命令 su (substitute user) 命令用于切換用戶。 su - username # 切換到指定用戶&#xff0c;并加載…

【學習Day5】操作系統

?&#x1f3fb;記錄學習過程中的輸出&#xff0c;堅持每天學習一點點~ ??希望能給大家提供幫助~歡迎點贊&#x1f44d;&#x1f3fb;收藏?評論?&#x1f3fb;指點&#x1f64f; 學習編輯文章的時間不太夠用&#xff0c;先放思維導圖&#xff0c;后續復習完善細節。

【C++】6-6 你好,輸出的格式控制(對齊)

6-6 你好&#xff0c;輸出的格式控制&#xff08;對齊&#xff09; 分數 10 全屏瀏覽 切換布局 作者 向訓文 單位 惠州學院 完善程序&#xff1a;按示例格式輸出所有分數&#xff0c;分數保留2位小數&#xff0c;分數左對齊輸出在兩根豎線之間 裁判測試程序樣例&#xff1…

vsto與vba的優缺點

VSTO&#xff08;Visual Studio Tools for Office&#xff09;和VBA&#xff08;Visual Basic for Applications&#xff09;都是用于擴展和定制Microsoft Office應用程序的開發工具。它們各有優缺點&#xff0c;適用于不同的場景。以下是對它們優缺點的詳細比較&#xff1a; V…

基于jeecgboot-vue3的Flowable流程-我的任務(三)

因為這個項目license問題無法開源&#xff0c;更多技術支持與服務請加入我的知識星球。 這一部分主要講我的任務里的詳情&#xff0c;看流程情況 1、主要調用record/index.vue&#xff0c;調用參數如下&#xff1a; /*** 詳情*/function handleDetail(record: Recordable) {c…

構建一個文字冒險游戲:Python 編程實戰

在本文中&#xff0c;我們將探索如何使用 Python 創建一個簡單的文字冒險游戲。通過這個項目&#xff0c;你將了解到基礎的編程技術&#xff0c;包括條件語句、函數和基本的用戶輸入處理&#xff0c;同時也能體會到文本游戲的魅力和設計的挑戰。 項目概述 文字冒險游戲是一種…

python-最接近target的值

【問題描述】&#xff1a;給定一個數組&#xff0c;在數組中找到兩個數&#xff0c;使它們的和最接近目標值的值但不超過目標值&#xff0c;然后返回它們的和。 【問題示例】&#xff1a;輸入target15,array[1,3,5,11,7],輸出14&#xff0c;31114。 完整代碼如下&#xff1a; …

童夢奇緣,味你而來 —— 蒙自源六一兒童節特別活動

在六月的暖陽下&#xff0c;孩子們的歡笑聲如同最美妙的樂章&#xff0c;奏響了夏日的序曲。在這個充滿童真與夢想的季節&#xff0c;蒙自源精心策劃了一場別開生面的六一兒童節特別活動&#xff0c;邀請每一位小朋友和大朋友&#xff0c;一同踏上一段奇妙的味蕾之旅。 從5月25…