关于python:Pythontkinter版的用户登录管理

5次阅读

共计 4089 个字符,预计需要花费 11 分钟才能阅读完成。

from tkinter import *
from tkinter import messagebox
import os
import xlrd
from xlutils.copy import copy
login=Tk()
login.title(‘ 登录界面 ’)

设计窗口大小

login.geometry(‘210×200’)

设计 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='[WebMoney 下载](https://www.gendan5.com/wallet/WebMoney.html) 用户注册').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()

正文完
 0