1. LoginPage.py
import tkinter as tk
from tkinter import messagebox
from db import db
from MainPage import MainPage
class LoginPage:
def __init__(self, master):
self.root = master
self.root.geometry('300x180')
self.root.title('登录页')
self.username = tk.StringVar()
self.password = tk.StringVar()
# 实现翻页
self.page = tk.Frame(root)
self.page.pack()
# 布局
tk.Label(self.page).grid(row=0, column=0)
tk.Label(self.page, text='用户:').grid(row=1, column=1)
tk.Entry(self.page, textvariable=self.username).grid(row=1, column=2)
tk.Label(self.page, text='密码:').grid(row=2, column=1, pady=10)
tk.Entry(self.page, textvariable=self.password).grid(row=2, column=2)
tk.Button(self.page, text='登录', command=self.login).grid(row=3, column=1, pady=10)
tk.Button(self.page, text='退出', command=self.page.quit).grid(row=3, column=2)
# 获取登录信息
def login(self):
name = self.username.get()
pwd = self.password.get()
flag, msg = db.check_login(name, pwd)
if flag:
self.page.destroy() # 销毁当前页面
MainPage(self.root) # 跳转第二个页面
else:
messagebox.showwarning(title='警告', message=msg)
if __name__ == '__main__':
root = tk.Tk()
LoginPage(master=root)
root.mainloop() # 将整个页面显示出来
2.MainPage.py
import tkinter as tk
from views import AboutFrame, ChangeFrame, InsertFrame, SearchFram, DeleteFrame
class MainPage:
# 如果master不写成 master: tk.TK 的话,会没有提示,写了也没有影响,只是说明这个master是一个tk的对象
def __init__(self, master: tk.Tk):
self.root = master
self.root.title('学生信息管理系统 v0.0.1')
self.root.geometry('600x400')
self.creat_page()
# 菜单栏
def creat_page(self):
"""
可以直接封装成一个views对象,用的时候直接调用即可
# '修改'页面
self.change_frame = tk.Frame(self.root)
tk.Label(self.change_frame, text='修改页面').pack()
# '关于'页面布局
self.about_frame = tk.Frame(self.root) # 绑定到root对象中
tk.Label(self.about_frame, text='关于作品:关于本作品由tkinter制作').pack()
tk.Label(self.about_frame, text='关于制作:关于本作品由tkinter制作').pack()
"""
"""封装后直接调用"""
self.insert_frame = InsertFrame(self.root)
self.delete_frame = DeleteFrame(self.root)
self.chang_frame = ChangeFrame(self.root)
self.search_frame = SearchFram(self.root)
self.about_frame = AboutFrame(self.root)
# 记得要绑定时间command
menubar = tk.Menu(self.root)
menubar.add_command(label='录入', command=self.show_insert)
menubar.add_command(label='查询', command=self.show_search)
menubar.add_command(label='删除', command=self.show_delete)
menubar.add_command(label='修改', command=self.show_change)
menubar.add_command(label='关于', command=self.show_about)
self.root['menu'] = menubar
def show_insert(self):
self.insert_frame.pack()
self.delete_frame.pack_forget()
self.chang_frame.pack_forget()
self.search_frame.pack_forget()
self.about_frame.pack_forget()
def show_delete(self):
self.delete_frame.pack()
self.insert_frame.pack_forget()
self.chang_frame.pack_forget()
self.search_frame.pack_forget()
self.about_frame.pack_forget()
def show_change(self):
self.chang_frame.pack()
self.insert_frame.pack_forget()
self.delete_frame.pack_forget()
self.search_frame.pack_forget()
self.about_frame.pack_forget()
def show_search(self):
self.search_frame.pack()
self.insert_frame.pack_forget()
self.delete_frame.pack_forget()
self.chang_frame.pack_forget()
self.about_frame.pack_forget()
def show_about(self):
self.about_frame.pack() # 当点击关于时,进行布局的显示
self.insert_frame.pack_forget()
self.delete_frame.pack_forget()
self.chang_frame.pack_forget()
self.search_frame.pack_forget()
if __name__ == '__main__':
root = tk.Tk()
MainPage(root)
root.mainloop()
3.views.py
"""
封装MainPage中的frame对象
"""
import tkinter as tk
class AboutFrame(tk.Frame):
def __init__(self, root):
# 继承
super().__init__(root)
tk.Label(self, text='关于作品:关于本作品由tkinter制作').pack()
tk.Label(self, text='关于制作:关于本作品由tkinter制作').pack()
class ChangeFrame(tk.Frame):
def __init__(self, root):
super().__init__(root)
tk.Label(self, text='修改页面').pack()
class InsertFrame(tk.Frame):
def __init__(self, root):
super().__init__(root)
tk.Label(self, text='插入页面').pack()
class SearchFram(tk.Frame):
def __init__(self, root):
super().__init__(root)
tk.Label(self, text='查询页面').pack()
class DeleteFrame(tk.Frame):
def __init__(self, root):
super().__init__(root)
tk.Label(self, text='删除页面').pack()
4.db.py
"""模型层"""
import json
class MysqlDatabases:
def __init__(self):
# 加载数据:读取文件
with open('users.json', mode='r', encoding='utf-8') as f:
text = f.read()
self.users = json.loads(text)
def check_login(self, username, password):
for user in self.users:
if username == user['username']:
if password == user['password']:
return True, '登录成功'
else:
return False, '登录失败,密码错误'
else:
return False, '登录失败,用户不存在'
db = MysqlDatabases()
if __name__ == '__main__':
print(db.check_login('admin', '123456'))
5.users.json
[
{"username": "admin", "password": "123456"}
]
6.students.json
[
{"name": "张三", "math": "65", "chinese": "75", "english": "100"},
{"name": "李四", "math": "75", "chinese": "95", "english": "91"},
{"name": "王五", "math": "99", "chinese": "85", "english": "83"}
]
7.效果



