界面设计
import tkinter as tk
import pickle
from tkinter import messagebox
class LoginPage:
class RegisterPage:
def __init__(self,master):
# master 传入的父函数
# root 是一个根窗口
self.root = master
self.root.geometry("735x520")
# self.root.title("登录界面")
self.root.title("学生管理系统--登录")
self.welcome_log = tk.PhotoImage(file="images/welcome.gif")
self.logo_img = tk.PhotoImage(file="images/logo.gif")
self.user_var = tk.StringVar() #定义一个变量,用来接收账号的输入
self.pwd_var = tk.StringVar() # 定义一个变量,用来接收账号的输入
self.create_register()
def create_register(self):
self.root.withdraw() # 隐藏根窗口,只保留顶级窗口
# 创建一个注册的界面,并且完成注册的功能,toplevel
self.registerpage = tk.Toplevel(self.root,) # 顶级窗口
self.registerpage.geometry("650x500")
self.registerpage.title("注册界面")
self.img_label2 = tk.Label(self.registerpage,image=self.logo_img)
self.reg_user_label = tk.Label(self.registerpage,text="用户名:",font=("微软雅黑",12,'bold'),pady=5,fg="#666")
self.reg_user_entry = tk.Entry(self.registerpage,font=("微软雅黑",12,"bold"),show="*")
self.reg_pwd_label = tk.Label(self.registerpage, text="密码:", font=("微软雅黑", 12, 'bold'), pady=5, fg="#666")
self.reg_pwd_entry = tk.Entry(self.registerpage, font=("微软雅黑", 12, "bold"),show="*")
self.reg_pwdcf_label = tk.Label(self.registerpage, text="确认密码:", font=("微软雅黑", 12, 'bold'), pady=5, fg="#666")
self.reg_pwdcf_entry = tk.Entry(self.registerpage, font=("微软雅黑", 12, "bold"))
self.reg_btn = tk.Button(self.registerpage,text="注 册",font=("微软雅黑", 12, "bold"), pady=5, fg="#666",width=20,command=self.register)
# grid 布局
self.img_label2.grid(row=0,column=0,columnspan=8)
self.reg_user_label.grid(row=1,column=1,pady=20)
self.reg_user_entry.grid(row=1,column=2,columnspan=3,sticky="we",pady=20)
self.reg_pwd_label.grid(row=2, column=1, pady=15)
self.reg_pwd_entry.grid(row=2, column=2, columnspan=3, sticky="we", pady=15)
self.reg_pwdcf_label.grid(row=3, column=1, pady=15)
self.reg_pwdcf_entry.grid(row=3, column=2, columnspan=3, sticky="we", pady=15)
self.reg_btn.grid(row=4,column=2,columnspan=2,pady=30)
实现注册功能的自定义函数
def register(self):
# 获取三个输入框的值
username = self.reg_user_entry.get()
pwd = self.reg_pwd_entry.get()
pwdcf = self.reg_pwdcf_entry.get()
if username and pwd and pwdcf:
# 三个输入框不为空
try:
with open("static/users.pickle", mode="rb") as fp:
user_info = pickle.load(fp)
except:
with open("static/users.pickle",mode="wb") as fp:
user_into = {"admin":"123"} # python数据类型
# 转换成pickle数据类型写入文件
pickle.dump(user_into,fp)
if username not in user_info:
# 判断username 不存在user_info中,保证用户名没有被注册过
if pwdcf == pwd:
# 判断两次密码要一致
user_info[username] = pwd
with open("static/users.pickle", mode="wb") as fp:
pickle.dump(user_info,fp)
# 完成注册功能,并且成功后关闭注册页面
messagebox.showinfo("注册成功", f"{username} 注册成功!")
self.registerpage.destroy()
self.root.deiconify() # 取消隐藏,显示根窗口
else:
self.reg_user_entry.delete(0, "end")
self.reg_pwd_entry.delete(0, "end")
self.reg_pwdcf_entry.delete(0, "end")
messagebox.showerror("注册失败", "两次密码不一致,请重新输入")
else:
self.reg_user_entry.delete(0,"end")
self.reg_pwd_entry.delete(0,"end")
self.reg_pwdcf_entry.delete(0, "end")
messagebox.showerror("注册失败", "用户名已注册,请重新输入")
else:
messagebox.showerror("注册失败", "用户名或密码不能为空,请重新输入")
实现注册成功后返回登录界面的自定义函数
def gotologin(self):
# 完成注册功能,并且成功后关闭注册界面
self.registerpage.destroy()
总结
与login界面设计中用到的库相同,使用实现效果解释到“学生管理系统开发login(python语言)”查看,后续代码持续更新中。