Python实战项目:开发桌面版学生管理系统(进阶版).3

目录

1设置单个菜单栏下内容
2导入模块并调用方法
3定义点击按钮弹出信息方法
4设置录入页面内容
5数据保存
6设置查询数据页面


设置单个菜单栏下内容

import tkinter

# 视图内容
class InsertFrame(tkinter.Frame):

    def __init__(self,root):
        super().__init__(master=root)  # 继承

        tkinter.Label(self, text='插入页面').pack()
        tkinter.Label(self, text='插入页面').pack()
        tkinter.Label(self, text='插入页面').pack()
        tkinter.Label(self, text='插入页面').pack()


class SearchFrame(tkinter.Frame):

    def __init__(self, root):
        super().__init__(master=root)  # 继承

        tkinter.Label(self, text='查询页面').pack()
        tkinter.Label(self, text='查询页面').pack()
        tkinter.Label(self, text='查询页面').pack()
        tkinter.Label(self, text='查询页面').pack()

class AboutFrame(tkinter.Frame):

    def __init__(self, root):
        super().__init__(master=root)  # 继承

        tkinter.Label(self, text='版权所属:ANGELA').pack()

Python实战项目:开发桌面版学生管理系统(进阶版).3_学生管理系统

导入模块并调用方法

from views import InsertFrame,AboutFrame,SearchFrame
self.insert_frame = InsertFrame(self.root)  # 创建框架的类
self.search_frame = SearchFrame(self.root)
self.about_frame = AboutFrame(self.root)
# self.insert_frame.pack()  # 将框架放置在self.root窗口中
# self.search_frame.pack()
self.about_frame.pack()

Python实战项目:开发桌面版学生管理系统(进阶版).3_学生管理系统_02

定义点击按钮弹出信息方法

def show_insert_frame(self):  # 显示插入方法
    self.insert_frame.pack()
def show_search_frame(self):  # 显示方法
    self.search_frame.pack()
def show_about_frame(self):  # 显示方法
    self.about_frame.pack()
def creat_page(self):
    menu_bar = tkinter.Menu(self.root)    # 导入菜单栏

    menu_bar.add_command(label='录入',command=self.show_insert_frame)    # 导入菜单按钮
    menu_bar.add_command(label='查询',command=self.show_search_frame)
    menu_bar.add_command(label='删除')
    menu_bar.add_command(label='修改')
    menu_bar.add_command(label='关于',command=self.show_about_frame)
    self.root['menu'] = menu_bar      # 设置菜单栏

Python实战项目:开发桌面版学生管理系统(进阶版).3_Python实战项目_03

Python实战项目:开发桌面版学生管理系统(进阶版).3_Python实战项目_04

Python实战项目:开发桌面版学生管理系统(进阶版).3_菜单栏_05

Python实战项目:开发桌面版学生管理系统(进阶版).3_返回结果_06

设置点击按钮只显示该页面内容
def show_insert_frame(self):  # 显示插入方法
    self.insert_frame.pack()
    self.search_frame.forget()
    self.about_frame.forget()
def show_search_frame(self):  # 显示方法
    self.search_frame.pack()
    self.about_frame.forget()
    self.insert_frame.forget()

def show_about_frame(self):  # 显示方法
    self.about_frame.pack()
    self.search_frame.forget()
    self.insert_frame.forget()

Python实战项目:开发桌面版学生管理系统(进阶版).3_返回结果_07

设置录入页面内容

class InsertFrame(tkinter.Frame):

    def __init__(self,root):
        super().__init__(master=root)  # 继承

        self.username = tkinter.StringVar()
        self.chinese = tkinter.StringVar()
        self.math = tkinter.StringVar()
        self.english = tkinter.StringVar()
        self.status = tkinter.StringVar()
        self.create_page()

    def create_page(self):
        # 调整窗口布局
        tkinter.Label(self, width=15).grid(row=0, column=0)

        # 设置窗口显示内容
        tkinter.Label(self, text='姓名').grid(row=1, column=0)  # label账户标签.grid具体位置
        tkinter.Entry(self, textvariable=self.username).grid(row=1, column=1)  # Entry输入文本框

        tkinter.Label(self, text='语文').grid(row=2, column=0)
        tkinter.Entry(self, textvariable=self.chinese).grid(row=2, column=1)

        tkinter.Label(self, text='数学').grid(row=3, column=0)
        tkinter.Entry(self, textvariable=self.math).grid(row=3, column=1)

        tkinter.Label(self, text='英语').grid(row=4, column=0)
        tkinter.Entry(self, textvariable=self.english).grid(row=4, column=1)

        tkinter.Button(self, text='录入', command=self.recode).grid(row=5, column=0)
        tkinter.Label(self,textvariable=self.status).grid(row=5, column=1)  ## 使用textvariable属性关联变量和标签
    def recode(self):
        print('记录数据的事件被触发了')

Python实战项目:开发桌面版学生管理系统(进阶版).3_菜单栏_08

调整页面布局
def create_page(self):
    # 调整窗口布局
    tkinter.Label(self, width=15).grid(row=0, column=0,padx=5,pady=5)  # padding边框填充缩写pad

    # 设置窗口显示内容
    tkinter.Label(self, text='姓名').grid(row=1, column=0)  # label账户标签.grid具体位置
    tkinter.Entry(self, textvariable=self.username).grid(row=1, column=1,padx=2,pady=5)  # Entry输入文本框

    tkinter.Label(self, text='语文').grid(row=2, column=0,padx=5,pady=5)
    tkinter.Entry(self, textvariable=self.chinese).grid(row=2, column=1,padx=5,pady=5)

    tkinter.Label(self, text='数学').grid(row=3, column=0,padx=5,pady=5)
    tkinter.Entry(self, textvariable=self.math).grid(row=3, column=1,padx=5,pady=5)

    tkinter.Label(self, text='英语').grid(row=4, column=0,padx=5,pady=5)
    tkinter.Entry(self, textvariable=self.english).grid(row=4, column=1,padx=5,pady=5)

    tkinter.Button(self, text='录入', command=self.recode).grid(row=6, column=1,padx=5,pady=5)
    tkinter.Label(self,textvariable=self.status).grid(row=5, column=3,padx=5,pady=5)
    # 使用textvariable属性关联变量和标签

Python实战项目:开发桌面版学生管理系统(进阶版).3_Python实战项目_09

Python实战项目:开发桌面版学生管理系统(进阶版).3_菜单栏_10

设置录入获取数据

def recode(self):
    print('记录数据的事件被触发了')
    print(
        self.username.get(),
        self.math.get(),
        self.chinese.get(),
        self.english.get(),
    )

Python实战项目:开发桌面版学生管理系统(进阶版).3_菜单栏_11

Python实战项目:开发桌面版学生管理系统(进阶版).3_Python实战项目_12

数据保存

def bd(self):
    """存储数据"""
    self.students = {}
    self.students["name"] = "self.username"
    self.students["math"] = "self.math"
    self.students["chinese"] = "self.chinese"
    self.students["english"] = "self.english"
def insert(self,student):
    """将学生数据插入列表"""
    self.bd()
    self.students.update(student)

    with open("students.json", "w") as outfile:
        json.dump(self.students, outfile)

Python实战项目:开发桌面版学生管理系统(进阶版).3_数据_13

Python实战项目:开发桌面版学生管理系统(进阶版).3_学生管理系统_14

设置查询数据页面

继承父类及初始化
class SearchFrame(tkinter.Frame):

    def __init__(self, root):
        super().__init__(master=root)  # 继承

        self.tree_view = None  # 初始化树视图
        self.create_page()

Python实战项目:开发桌面版学生管理系统(进阶版).3_Python实战项目_15

创建树视图及刷新按钮
def create_page(self):
    if self.tree_view is None:  # 只有在树视图未创建时才创建
        self.create_tree_view()
    self.show_data_frame()
    tkinter.Button(self, text='刷新数据', command=self.show_data_frame).pack(anchor=tkinter.E, pady=5)

Python实战项目:开发桌面版学生管理系统(进阶版).3_返回结果_16

传入数据返回结果
def show_data_frame(self):
    # 删除原节点
    for _ in map(self.tree_view.delete, self.tree_view.get_children("")):
        pass
    f = InsertFrame
    stud = [
        {"name": "Alice", "math": 90, "chinese": 85, "english": 92},
        {"name": "Bob", "math": 88, "chinese": 90, "english": 87},
        # ... 其他学生数据
    ]
    students = self.process_students(stud)  # 处理学生数据并返回结果
    for index, stu in enumerate(students):
        print(stu)
        self.tree_view.insert('', index + 1,
                             values = f"{stu['name']}\\t {stu['chinese']} \\t{stu['math']} \\t{stu['english']}")

def process_students(self, students):
    # 处理学生数据并返回结果,这里你可以根据需要对数据进行处理和返回
    return [stu for stu in students]  # 这里只是一个简单的示例,返回学生列表的副本

Python实战项目:开发桌面版学生管理系统(进阶版).3_学生管理系统_17

设置表格格式
def create_tree_view(self):
    # 表格
    columns = ("name", "chinese", "math", "english")
    columns_value = ("姓名", "语文", "数学", "英语")
    self.tree_view = ttk.Treeview(self, show="headings", columns=columns)
    self.tree_view.column('name', width=80, anchor='center')
    self.tree_view.column('chinese', width=80, anchor='center')
    self.tree_view.column('math', width=80, anchor='center')
    self.tree_view.column('english', width=80, anchor='center')
    self.tree_view.heading('name', text='姓名')
    self.tree_view.heading('chinese', text='语文')
    self.tree_view.heading('math', text='数学')
    self.tree_view.heading('english', text='英语')
    self.tree_view.pack(fill=tkinter.BOTH, expand=True)

Python实战项目:开发桌面版学生管理系统(进阶版).3_数据_18

Python实战项目:开发桌面版学生管理系统(进阶版).3_学生管理系统_19

主程序调用查询数据

from views import InsertFrame,AboutFrame,SearchFrame
self.search_frame = SearchFrame(self.root)
menu_bar.add_command(label='查询',command=self.show_search_frame)
def show_insert_frame(self):  # 显示插入方法
    self.insert_frame.pack()
    self.search_frame.forget()
    self.about_frame.forget()

def show_search_frame(self):  # 显示方法
    self.search_frame.pack()
    self.about_frame.forget()
    self.insert_frame.forget()


def show_about_frame(self):  # 显示方法
    self.about_frame.pack()
    self.search_frame.forget()
    self.insert_frame.forget()

Python实战项目:开发桌面版学生管理系统(进阶版).3_数据_20

Python实战项目:开发桌面版学生管理系统(进阶版).3_返回结果_21