python学生管理系统笔记(基础框架)

 

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.效果

 

 

 

posted on 2023-05-16 10:19  201812  阅读(71)  评论(0)    收藏  举报