您的位置:首页 > 编程语言 > Python开发

利用Python中自带Tkinter模块创建一个用户登录界面(GUI)

2019-05-18 15:47 731 查看
版权声明:该文为本人原创文章,引用请注明出处,谢谢! https://blog.csdn.net/sunkuocsdn/article/details/90315660
第一次写博客,有点小紧张..........
最近突然想学习一下Python的GUI框架,先从基础学起吧!Python有很多模块可以进行GUI编程,其中最简单的就是Tkinter模块了,而且该模块不需要进行安装,它是Python自带的模块,使用的时候直接import就OK! 这里强调一下,如果你使用的是python2的话,应该是import Tkinter,如果你使用的是python3的话,那么应该是import tkinter,注意不要搞错了!
Tkinter模块一共就有十几种控件可以使用,所以说它学起来还是挺容易的,也就是因为很简单,所以它做出来的界面是比较粗糙的,但是对于平常自己做一些小东西啥的还是够用的,而且一般的大型开发也不会用到它。
关于Tkinter模块的教程网上一搜一大把,请各位朋友自己去找吧,我就不再赘述了,下面直接上代码!!
该代码实现的主要是用户的登陆功能和注册功能,登录过程还添加了对输入账号密码信息是否为空的检测,同样的,注册过程也添加了该检测。用户的账号密码信息是保存在一个创建好的字典里面的,然后将字典保存到指定文件中。
本人代码小白一枚,代码写的可能有点烂。。。。各位朋友如果有啥意见欢迎在评论区一起探讨!
# -*- coding: utf-8 -*-

import tkinter as tk
import tkinter.messagebox
import pickle

window = tk.Tk()                               # 创建根窗口
window.title('Welcome to Sunkuo Website')
window.geometry('500x400')

# 在根窗口上放置相应标签和Entry控件,并摆放好位置
tk.Label(window, text='欢迎!请输入您的账号密码!', font=('Arial', 20)).pack()
tk.Label(window, text='通行证账号:', font=('Arial', 14)).place(x=50, y=100)
tk.Label(window, text='密码:', font=('Arial', 14)).place(x=50, y=150)
e_u = tk.Entry(window, show=None, font=('Arial', 12))     # 输入账号信息的Entry控件
e_u.place(x=200, y=105)
e_p = tk.Entry(window, show='*', font=('Arial', 12))      # 输入密码信息的Entry控件
e_p.place(x=200, y=155)

fr = open('userdate.txt', 'rb')         # 以二进制方式打开一个文件(只读)
user_info = pickle.load(fr)             # 使用load()将数据从文件中序列化读出
fr.close()                              # 关闭文件

# 登录函数
def sign_in():
global user_p
# fr = open('userdate.txt', 'rb')
# user_info = pickle.load(fr)
# fr.close()

# 通行证账号判断
flag = 1                 # 设定标志位(标志:输入通行证账号不能为空)
if e_u.get() == '':      # 判断用户是否输入通行证账号
flag = 0
tkinter.messagebox.showerror(title='抱歉!', message='输入通行证账号不能为空!')

i = 0
flag_1 = 0               # 设定标志位(标志:是否从用户信息中遍历到用户所输入的通行证账号)
for key in user_info:    # 遍历用户信息
if (key == e_u.get()) & (flag == 1):     # 若用户已经输入账号且从用户信息中遍历到账号
flag_1 = 1
user_p = user_info[key]              # 将用户信息的账号所对应的密码提取出来
break
i += 1
if (i == len(user_info)) & (flag == 1):  # 若遍历结束后没有发现用户所输入账号,则输出通行证账号不存在
tkinter.messagebox.showerror(title='抱歉!', message='通行证账号不存在')

# 密码判断
if flag_1 == 1:                              # 标志位判断(成立:已经遍历到账号信息,不成立:没有遍历到账号信息)
if e_p.get() == '':                      # 判断用户所输入密码是否为空
tkinter.messagebox.showerror(title='抱歉!', message='输入密码不能为空!')

elif user_p == e_p.get():                # 判断用户所输入密码与从用户信息文件中取出的密码是否相同
tkinter.messagebox.showinfo(title='恭喜您!', message='登陆成功!')
window.quit()                        # 登陆成功,关闭根窗口
else:
tkinter.messagebox.showwarning(title='抱歉', message='密码有误,请重新输入!')

# 注册函数
def b_register():
def register():
# 通行证账号检测
flag_2 = 1                               # 设定标志位(标志:用户输入的通行证账号是否为空)
if e_register_u.get() == '':             # 判断用户输入的通行证账号是否为空
flag_2 = 0
tkinter.messagebox.showerror(title='抱歉!', message='输入通行证账号不能为空!')

flag_3 = 1                               # 设定标志位(标志:用户输入的通行证账号是否已被注册)
for key in user_info:                    # 遍历用户信息
if (key == e_register_u.get()) & (flag_2 == 1):    # 若用户输入的通行证账号不为空,且遍历到的账号信息与输入的相同
flag_3 = 0
tkinter.messagebox.showerror(title='抱歉!', message='该通行证账号已注册!')

#密码检测
flag_4 = 1                               # 设定标志位(标志:用户输入密码是否为空)
if (e_register_p.get() == '') & (flag_2 == 1):     # 若用户输入的通行证账号不为空,且输入的密码为空
flag_4 = 0
tkinter.messagebox.showerror(title='抱歉!', message='输入密码不能为空!')

if (e_register_p.get() != e_register_np.get()) & (flag_3 == 1):        #判断两次密码输入是否一致
tkinter.messagebox.showwarning(title='抱歉', message='两次密码输入不一致,请重新输入!')

# 两次密码输入一致,进行下面操作
if (e_register_p.get() == e_register_np.get()) & (flag_2 == 1) & (flag_3 == 1) & (flag_4 == 1):
user_info[e_register_u.get()] = e_register_p.get()       # 将输入的账号、密码存储在字典中

fw = open('userdate.txt', 'wb')                          # 以二进制方式打开一个文件(只写)
pickle.dump(user_info, fw)                               # 使用dump()将数据序列化到文件中
fw.close()                                               # 关闭文件

tkinter.messagebox.showinfo(title='恭喜您!', message='注册成功!')
window_register.destroy()                                # 关闭注册窗口

window_register = tk.Toplevel(window)                            # 在根窗口上建立一个注册窗口
window_register.title('Register Window')
window_register.geometry('400x300')

# 在注册窗口上放置相应标签和Entry控件,并摆放好位置
tk.Label(window_register, text='通行证账号:', font=('Arial', 14)).place(x=25, y=50)
tk.Label(window_register, text='密码:', font=('Arial', 14)).place(x=25, y=100)
tk.Label(window_register, text='确认密码:', font=('Arial', 14)).place(x=25, y=160)
e_register_u = tk.Entry(window_register, show=None, font=('Arial', 12))   # 输入注册账号信息的Entry控件
e_register_u.place(x=165, y=50)
e_register_p = tk.Entry(window_register, show=None, font=('Arial', 12))   # 输入注册密码信息的Entry控件
e_register_p.place(x=165, y=100)
e_register_np = tk.Entry(window_register, show=None, font=('Arial', 12))  # 第二次输入注册密码信息的Entry控件
e_register_np.place(x=165, y=160)
# 在注册窗口上建立一个按键
b_sign_in_register = tk.Button(window_register, text='确认注册', font=('Arial', 14), command=register).place(x=180, y=220)

# 在根窗口上建立两个按键
b_sign_in = tk.Button(window, text='登录', font=('Arial', 14), command=sign_in).place(x=190, y=220)
b_register = tk.Button(window, text='注册', font=('Arial', 14), command=b_register).place(x=320, y=220)

window.mainloop()     # 主窗口循环显示
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: