此次登录界面完全是为了后面的图像处理GUI界面所添加的点睛之笔,不喜勿喷。
界面建立所要调用的模块:
import tkinter as tk
import tkinter.messagebox
import pickle
from tux import Image_sys #调用文件tux
登陆主界面搭建,三个文本数据输入框,三个按钮。
# 窗口
window = tk.Tk()
window.title('欢迎进入图像处理系统')
window.geometry('690x500')
# 画布放置图片
canvas=tk.Canvas(window,height=400,width=800)
imagefile=tk.PhotoImage(file='hdu3.png')
image=canvas.create_image(0,0,anchor='nw',image=imagefile)
canvas.pack(side='top')`在这里插入代码片`
# 标签 用户名密码
tk.Label(window, text='用户名:').place(x=200, y=320)
tk.Label(window, text='密码:').place(x=200, y=360)
# 用户名输入框
var_usr_name = tk.StringVar()
entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
entry_usr_name.place(x=260, y=320)
# 密码输入框
var_usr_pwd = tk.StringVar()
entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
entry_usr_pwd.place(x=260, y=360)
# 登录 注册按钮
bt_login = tk.Button(window, text='登录', command=usr_log_in)
bt_login.place(x=260, y=400)
bt_logup = tk.Button(window, text='注册', command=usr_sign_up)
bt_logup.place(x=330, y=400)
bt_logquit = tk.Button(window, text='退出', command=usr_sign_quit)
bt_logquit.place(x=400, y=400)
登陆函数,这里我们所需要的用户名和登陆密码都是经过注册函数所保存的本地字典文件usr_info.pickle中,用户名作为键,密码存为值,一一对应关系。登陆函数根据输入值,读取字典里的用户名与密码判断字典内是否存在相应数据实现登陆匹配,若输入用户名键而不匹配相应的值,则弹出提示框 ‘密码错误’,若输入用户名不存在或者为空,则弹出提示框’欢迎’, ‘您还没有注册,是否现在注册’
# 登录函数
def usr_log_in():
# 输入框获取用户名密码
usr_name = var_usr_name.get()
usr_pwd = var_usr_pwd.get()
# 从本地字典获取用户信息,如果没有则新建本地数据库
try:
with open('usr_info.pickle', 'rb') as usr_file:
usrs_info = pickle.load(usr_file)
except FileNotFoundError:
with open('usr_info.pickle', 'wb') as usr_file:
usrs_info = {'admin': 'admin'}
pickle.dump(usrs_info, usr_file)
# 判断用户名和密码是否匹配
if usr_name in usrs_info:
if usr_pwd == usrs_info[usr_name]:
tk.messagebox.showinfo(title='welcome',
message='欢迎您:' + usr_name)
window.destroy()
Image_sys() #打开主界面
else:
tk.messagebox.showerror(message='密码错误')
# 用户名密码不能为空
elif usr_name == '' or usr_pwd == '':
tk.messagebox.showerror(message='用户名或密码为空')
# 不在数据库中弹出是否注册的框
else:
is_signup = tk.messagebox.askyesno('欢迎', '您还没有注册,是否现在注册')
if is_signup:
usr_sign_up() #打开注册界面
注册函数,我们建立注册子界面,通过新建三个文本输入框, 用户名变量,密码变量,重复密码变量来进行数据输入,首先要获取这三个输入框中的数据,判断本地字典内是否存在已注册数据,若存在则弹出提示框’错误’, ‘用户名已存在’ ,重复密码判断前后密码输入是否一致,若不同则弹出提示框 ‘错误’, ‘密码前后不一致’ ,若获取的数据均不存在于本地字典中且前后密码变量一致,则将获取数据存入字典当中,并弹出提示框(‘欢迎’, ‘注册成功’)。
# 注册函数
def usr_sign_up():
# 确认注册时的相应函数
def signtowcg():
# 获取输入框内的内容
nn = new_name.get()
np = new_pwd.get()
npf = new_pwd_confirm.get()
# 本地加载已有用户信息,如果没有则已有用户信息为空
try:
with open('usr_info.pickle', 'rb') as usr_file:
exist_usr_info = pickle.load(usr_file)
except FileNotFoundError:
exist_usr_info = {}
# 检查用户名存在、密码为空、密码前后不一致
if nn in exist_usr_info:
tk.messagebox.showerror('错误', '用户名已存在')
elif np == '' or nn == '':
tk.messagebox.showerror('错误', '用户名或密码为空')
elif np != npf:
tk.messagebox.showerror('错误', '密码前后不一致')
# 注册信息没有问题则将用户名密码写入数据库
else:
exist_usr_info[nn] = np
with open('usr_info.pickle', 'wb') as usr_file:
pickle.dump(exist_usr_info, usr_file)
tk.messagebox.showinfo('欢迎', '注册成功')
# 注册成功关闭注册框
window_sign_up.destroy()
注册界面建立,设置三个文本输入框,与一个按键。
# 新建注册界面
window_sign_up = tk.Toplevel(window)
window_sign_up.geometry('350x200')
window_sign_up.title('注册')
# 用户名变量及标签、输入框
new_name = tk.StringVar()
tk.Label(window_sign_up, text='用户名:').place(x=10, y=10)
tk.Entry(window_sign_up, textvariable=new_name).place(x=150, y=10)
# 密码变量及标签、输入框
new_pwd = tk.StringVar()
tk.Label(window_sign_up, text='请输入密码:').place(x=10, y=50)
tk.Entry(window_sign_up, textvariable=new_pwd, show='*').place(x=150, y=50)
# 重复密码变量及标签、输入框
new_pwd_confirm = tk.StringVar()
tk.Label(window_sign_up, text='请再次输入密码:').place(x=10, y=90)
tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*').place(x=150, y=90)
# 确认注册按钮及位置
bt_confirm_sign_up = tk.Button(window_sign_up, text='确认注册',
command=signtowcg)
bt_confirm_sign_up.place(x=150, y=130)
这是一个简单的登录界面操作,大多系统的登录都是遵从这样的流程,以后有了新的想法会做好相应优化。