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()
t服务器托管网kinter.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()
导入模块并调用方法
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()
定义点击按钮弹出信息方法
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 # 设置菜单栏
设置点击按钮只显示该页面内容
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()
设置录入页面内容
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, colu服务器托管网mn=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('记录数据的事件被触发了')
调整页面布局
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属性关联变量和标签
设置录入获取数据
def recode(self):
print('记录数据的事件被触发了')
print(
self.username.get(),
self.math.get(),
self.chinese.get(),
self.english.get(),
)
数据保存
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)
设置查询数据页面
继承父类及初始化
class SearchFrame(tkinter.Frame):
def __init__(self, root):
super().__init__(master=root) # 继承
self.tree_view = None # 初始化树视图
self.create_page()
创建树视图及刷新按钮
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)
传入数据返回结果
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] # 这里只是一个简单的示例,返回学生列表的副本
设置表格格式
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)
主程序调用查询数据
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()
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: Gradio-Lite: 完全在浏览器里运行的无服务器 Gradio
Gradio 是一个经常用于创建交互式机器学习应用的 Python 库。在以前按照传统方法,如果想对外分享 Gradio 应用,就需要依赖服务器设备和相关资源,而这对于自己部署的开发人员来说并不友好。 欢迎 Gradio-lite ( @gradio/lite…