您好,登錄后才能下訂單哦!
小編給大家分享一下Python中如何實(shí)現(xiàn)tkinter的用戶登錄管理,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
1、簡(jiǎn)單易用,與C/C++、Java、C# 等傳統(tǒng)語言相比,Python對(duì)代碼格式的要求沒有那么嚴(yán)格;2、Python屬于開源的,所有人都可以看到源代碼,并且可以被移植在許多平臺(tái)上使用;3、Python面向?qū)ο?,能夠支持面向過程編程,也支持面向?qū)ο缶幊蹋?、Python是一種解釋性語言,Python寫的程序不需要編譯成二進(jìn)制代碼,可以直接從源代碼運(yùn)行程序;5、Python功能強(qiáng)大,擁有的模塊眾多,基本能夠?qū)崿F(xiàn)所有的常見功能。
編寫一個(gè)用戶登錄管理程序,設(shè)計(jì)窗體的布局,制定密碼規(guī)則和驗(yàn)證碼規(guī)則。要求使用 Python 標(biāo)準(zhǔn)庫 tkinter 編寫基于GUI 的用戶登錄窗體。通過該窗體,用戶輸入用戶名、密碼和驗(yàn)證碼等信息,確認(rèn)登錄后需要判斷用戶信息是否合法,并彈出對(duì)應(yīng)的反饋信息。通過判斷用戶是否在用戶信息中,以及輸入密碼是否與用戶信息文件中用戶名所對(duì)應(yīng)的密碼是否相同,來判斷用戶是否合法。此外,新用戶還可以進(jìn)行注冊(cè),注冊(cè)需要輸入用戶名、密碼、手機(jī)號(hào)和身份證號(hào)等信息。注冊(cè)時(shí)密碼需要遵循一定規(guī)則(長(zhǎng)度不小于8且含有數(shù)字、字母和特殊字符),注冊(cè)后將用戶信息存儲(chǔ)到文件中,更新用戶信息文件。步驟
from tkinter import * from tkinter import messagebox import os import xlrd from xlutils.copy import copy login=Tk() login.title('登錄界面') # 設(shè)計(jì)窗口大小 login.geometry('210x200') # 設(shè)計(jì)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="驗(yàn)證碼:").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 # 行數(shù) sheet_col_mount = sheet.ncols # 列數(shù) 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; # 未注冊(cè)用戶 return -1 # 用戶存在時(shí),判斷密碼是否正確 def isPasswordDirect(data,passWord): filename = "用戶信息.xls" excel = xlrd.open_workbook(filename, encoding_override="utf-8") sheet = excel.sheets()[0] sheet_row_mount = sheet.nrows # 行數(shù) sheet_col_mount = sheet.ncols # 列數(shù) 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]): # 記錄用戶名在數(shù)組中的位置 record=i break for i in range(len(sheet_passWord)): if(passWord==sheet_passWord[i]): # 判斷用戶名位置與密碼位置是否相同 # 以及密碼是否與用戶信息中的密碼一致 if(i==record): # 密碼正確 return 1 break # 密碼錯(cuò)誤 return -1 def successful(): # 判斷用戶名不存在 if (isInExcel(name.get())==-1): messagebox.showerror(title='wrong', message='用戶不存在,請(qǐng)注冊(cè)') # 密碼不正確 elif (isPasswordDirect(name.get(),passWord.get())==-1): messagebox.showerror(title='wrong', message='密碼不正確') # 驗(yàn)證碼位數(shù)不正確 elif len(verifyCode.get())!=4: messagebox.showerror(title='wrong',message='驗(yàn)證碼應(yīng)為4位') else: messagebox.showinfo(title='successful',message='登錄成功') Button(login, text='發(fā)送驗(yàn)證碼').grid(row=4, column=0, columnspan=3) Button(login,text='登錄',command=successful).grid(row=5,column=0,columnspan=3) # 設(shè)計(jì)用戶注冊(cè)GUI界面 def registereds(): registered=Tk() registered.title('registered') registered.geometry('230x185') Label(registered, text='用戶注冊(cè)').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='確認(rèn)密碼:').grid(row=3, column=0) repasswd = Entry(registered, show='●') repasswd.grid(row=3, column=1) Label(registered, text='手機(jī)號(hào):').grid(row=4, column=0, sticky=E) phonenum = Entry(registered) phonenum.grid(row=4, column=1) Label(registered, text='身份證號(hào):').grid(row=5, column=0) man = Entry(registered) man.grid(row=5, column=1) # 判斷是否含有特殊符號(hào) def teshufuhao(input_psd): string = "~!@#$%^&*()_+-*/<>,.[]\/" for i in string: if i in input_psd: return True return False def registeredes(): # 密碼長(zhǎng)度小于8 if len(passwds.get()) < 8: messagebox.showerror(title='wrong', message='注冊(cè)失敗,密碼不應(yīng)少于8位') # 密碼不同時(shí)含有數(shù)字、字母和特殊符號(hào) 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='注冊(cè)失敗,密碼格式錯(cuò)誤,必須包括字母和數(shù)字以及特殊符號(hào)') # 兩次密碼輸入不一樣 elif passwds.get() != repasswd.get(): messagebox.showerror(title='wrong', message='注冊(cè)失敗,兩次密碼不相同') # 手機(jī)號(hào)不正確 elif not (phonenum.get().isdigit() and len(phonenum.get()) == 11): messagebox.showerror(title='wrong', message='注冊(cè)失敗,請(qǐng)輸入正確的11位手機(jī)號(hào)') # 身份證號(hào)不正確 elif len(man.get()) != 18: messagebox.showerror(title='wrong', message='注冊(cè)失敗,請(qǐng)輸入正確的18位身份證號(hào)') else: messagebox.showinfo(title='successful', message='注冊(cè)成功!') # 將新用戶信息存入用戶信息文件 excel = xlrd.open_workbook('用戶信息.xls') sheet = excel.sheets()[0] nrow = sheet.nrows # 文件行數(shù) wb = copy(excel) w_sheet = wb.get_sheet(0) # 從數(shù)據(jù)下一行開始寫入新用戶信息 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='注冊(cè)', command=registeredes).grid(row=6, column=0, columnspan=3) Button(login, text='注冊(cè)', command=registereds).grid(row=6, column=0, columnspan=3) login.mainloop()
(1)密碼正確(對(duì)照用戶信息文件輸入密碼),結(jié)果顯示登錄成功
(2)密碼不正確,結(jié)果顯示密碼不正確
(3)密碼正確,驗(yàn)證碼位數(shù)不對(duì)
(4)用戶名不存在
5. 注冊(cè)新用戶
(1)新用戶寫入用戶信息文件
(2)再次登錄,用戶登錄成功
以上是“Python中如何實(shí)現(xiàn)tkinter的用戶登錄管理”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。