前言
上一节,我们已经完成了GUI界面的绘制,本节我们将实现数据的加载并显示到GUI中来。
part3 数据的存储与数据的展示
一、读取文件数据到系统
1. 需求分析
我们现在希望能把存储在txt文件中的学生和教师信息读取到系统中来,分别存储在list_student_all
和list_teacher_all
中。
2. 实现过程
我们新建一个service
包,并在该目录下创建一个fileoperator.py
文件,定义一个File类,分别定义两个列表用于存储学号和老师信息,定义两个变量存储记录学生和老师信息的文件路径
# 记录学生信息的文件路径
self.student_path = "../file/student.txt"
# 记录教师信息文件的路径
self.teacher_path = "../file/teacher.txt"
# 定义存储所有学生的list
self.list_student_all = []
# 定义存储所有老师的list
self.list_teacher_all = []
read_from_file
用来读取学生和老师的信息。记得用try...except
做异常处理。然后使用with open
逐行读取文本文件,并通过while循环将每次读到的结果存储到list_all_student
列表中即可。
def read_from_file(self):
# 读取学生信息
try:
with open(self.student_path, mode="r", encoding="UTF-8") as fd_student:
# 逐行读取
current_line = fd_student.readline() # 读取了第一行
# 判断是否有数据
while current_line:
# 通过逗号分割成数组
student_list = current_line.split(",")
# 分隔后的数组直接添加到存储所有学生信息的list中
self.list_student_all.append(student_list)
# 读取下一行
current_line = fd_student.readline()
except Exception as e:
raise e
二、展示学生和教师信息
1. 需求分析
我们已经读取到文本文件中的信息了,接下来我们就把这些数据展示到主界面GUI中。为了一打开主界面GUI就能看到数据,我们修改maingui.py
中的代码。
2. 实现过程
我们在MainGUI类的初始化方法中,实例化一个我们上面定义的File
类,为了调用这个类,所以我们要导入一下fileoperator
file_info
但是此时我们访问file_info
对象中的list_student_all
会很长很累赘,我们直接新定义一个变量来指向list_student_all
这个数组
接下来,我们再定义一个方法load_student_treeview
将student_all
列表中的数据通过TreeView这个表格显示出来。
3. TreeView加载数据的方法
TreeView这个常用的表格控件,加载数据是有一定顺序的; (1)把当前的学生TreeView内容清空
通过调用TreeView
对象的get_children
方法,获取索引列表,用一个for循环依次调用TreeView
对象的delete
方法,传入索引值作为参数将表格清空。
TreeView
对象的insert
方法,通过一个for循环依次将列表中的数据插入到表格中。
if len(self.student_all) == 0:
showinfo("系统消息","没有任何学生信息加载到表格!")
else:
for index in range(len(self.student_all)):
self.Tree_student.insert("", index, values=
(self.student_all[index][0],
self.student_all[index][1],
self.student_all[index][2],
self.student_all[index][6],
self.student_all[index][4],
self.student_all[index][5],))
4. 效果演示
最后
这一讲,我们完成了数据的存储方式的设计,已经从文件中读取数据加载到GUI界面中,下一节我们将完善明细窗体的不同状态。