tkinter版的用戶登錄管理
- 內容
撰寫一個用戶登錄管理程式,設計表單的布局,制定密碼規則和驗證碼規則,要求使用 Python 標準庫 tkinter 撰寫基于GUI 的用戶登錄表單,通過該表單,用戶輸入用戶名、密碼和驗證碼等資訊,確認登錄后需要判斷用戶資訊是否合法,并彈出對應的反饋資訊,通過判斷用戶是否在用戶資訊中,以及輸入密碼是否與用戶資訊檔案中用戶名所對應的密碼是否相同,來判斷用戶是否合法,此外,新用戶還可以進行注冊,注冊需要輸入用戶名、密碼、手機號和身份證號等資訊,注冊時密碼需要遵循一定規則(長度不小于8且含有數字、字母和特殊字符),注冊后將用戶資訊存盤到檔案中,更新用戶資訊檔案, - 步驟

- 代碼
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)密碼正確(對照用戶資訊檔案輸入密碼),結果顯示登錄成功


(2)密碼不正確,結果顯示密碼不正確

(3)密碼正確,驗證碼位數不對

(4)用戶名不存在

5. 注冊新用戶
(1)新用戶寫入用戶資訊檔案


(2)再次登錄,用戶登錄成功

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/278866.html
標籤:python
