Skip to content

前言

上一节,我们已经完成了GUI界面的绘制,本节我们将实现数据的加载并显示到GUI中来。

part3 数据的存储与数据的展示

一、读取文件数据到系统

1. 需求分析

图片.png 我们现在希望能把存储在txt文件中的学生和教师信息读取到系统中来,分别存储在list_student_alllist_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

from fileoperator import *
然后实例化一个file对象file_info
self.file_info = File()`
但是此时我们访问file_info对象中的list_student_all会很长很累赘,我们直接新定义一个变量来指向list_student_all这个数组
self.student_all = self.file_info.list_student_all
接下来,我们再定义一个方法load_student_treeviewstudent_all列表中的数据通过TreeView这个表格显示出来。

3. TreeView加载数据的方法

TreeView这个常用的表格控件,加载数据是有一定顺序的; (1)把当前的学生TreeView内容清空

通过调用TreeView对象的get_children方法,获取索引列表,用一个for循环依次调用TreeView对象的delete方法,传入索引值作为参数将表格清空。

for index in self.Tree_student.get_children():
   self.Tree_student.delete(index)
(2)加载列表中的数据 先判断列表是否为空,如果为空则弹窗警告。否则调用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. 效果演示

图片.png

最后

这一讲,我们完成了数据的存储方式的设计,已经从文件中读取数据加载到GUI界面中,下一节我们将完善明细窗体的不同状态。