脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python中tkinter的用户登录管理的实现

Python中tkinter的用户登录管理的实现

2021-10-18 09:30海胆奶油饭 Python

这篇文章主要介绍了Python中tkinter的用户登录管理的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

内容

编写一个用户登录管理程序,设计窗体的布局,制定密码规则和验证码规则。要求使用 python 标准库 tkinter 编写基于gui 的用户登录窗体。通过该窗体,用户输入用户名、密码和验证码等信息,确认登录后需要判断用户信息是否合法,并弹出对应的反馈信息。通过判断用户是否在用户信息中,以及输入密码是否与用户信息文件中用户名所对应的密码是否相同,来判断用户是否合法。此外,新用户还可以进行注册,注册需要输入用户名、密码、手机号和身份证号等信息。注册时密码需要遵循一定规则(长度不小于8且含有数字、字母和特殊字符),注册后将用户信息存储到文件中,更新用户信息文件。步骤

Python中tkinter的用户登录管理的实现

代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
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)密码正确(对照用户信息文件输入密码),结果显示登录成功

Python中tkinter的用户登录管理的实现

Python中tkinter的用户登录管理的实现

(2)密码不正确,结果显示密码不正确

Python中tkinter的用户登录管理的实现

(3)密码正确,验证码位数不对

Python中tkinter的用户登录管理的实现

(4)用户名不存在

Python中tkinter的用户登录管理的实现

5. 注册新用户

(1)新用户写入用户信息文件

Python中tkinter的用户登录管理的实现

Python中tkinter的用户登录管理的实现

(2)再次登录,用户登录成功

Python中tkinter的用户登录管理的实现

到此这篇关于python中tkinter的用户登录管理的实现的文章就介绍到这了,更多相关tkinter用户登录管理内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_43367971/article/details/115920226

延伸 · 阅读

精彩推荐