Python GUI项目实战(六)添加学生信息

前言

在上一节中,我们完成了明细窗体的最终数据填充,双击任意一行即可显示该行学生的详细信息。作为一个学校信息管理系统,我们肯定需要能够向系统中添加学生信息。所以本小节我们要实现的功能是:完成学生信息的添加功能。

一、添加流程中数据的分析

1. 添加数据的思路

在主窗体点击添加学生按钮,跳转到明细窗体,这个我们在前面的章节中已经实现了,现在我们要考虑的是,在明细窗体的页面数据添加完成后所要进行的操作。首先需要考虑的是将明细窗体中写入的数据项存储起来。怎么存储起来呢?现在有两种主要思路:

思路01:

第一步:写入到文件;
第二步:将新添加的信息在主界面显示;
然而由于本项目没有使用数据库技术存储数据,而每次添加、修改和删除都要写入文件的话,一方面会影响到程序运行的速度。另一方面会存在这样的情况:添加或者修改数据时反悔了、不想保存了,要是默认直接写入会产生垃圾数据。所以这种思路是存在缺陷的。

思路02:
屏幕快照 2020-08-12 上午11.18.19.png

由于我们所有的学生信息都存储在列表all_student_list中,所以当学生明细窗体中数据添加完成后,我们将新添加的数据直接插入到all_student_list中。等到关闭窗体的时候,系统弹窗询问是否保存数据,点击是,再把数据存储到文件中。

2. 注意事项:

all_student_list数据是在主窗体里定义的,然而执行添加功能是在明细窗体中进行的,所以我们必须要在明细窗体的构造函数中再添加一个参数来接收主窗体传递的数据!!!

屏幕快照 2020-08-12 上午11.30.54.png

二、添加数据的实现

明细窗体已经添加了all_student_list参数,那么我们主窗体的加载明细窗体的方法load_detail_window()也要跟着做出相应的调整:

def load_detail_window(self):
    detail_window = detailgui.DetailWindow(self.action_flag,self.current_student_list,self.all_student_list)

于此同时,在明细窗体中我们新建一个commit()方法,为了将明细窗体中各个输入框中输入的字符串保存到all_student_list中,最后把commit()方法绑定在保存按钮上。

def commit(self):
    if self.flag == 1:  # 查看
        pass
    elif self.flag == 2:    # 添加
        # 准备数据
        temp_list = []
        if len(str(self.Entry_sno.get()).strip()) == 0:
            showinfo("系统消息","学号不能为空!")
        else:
            temp_list.append(str(self.Entry_sno.get()).strip())
            temp_list.append(str(self.Entry_name.get()).strip())
            if self.var_gender.get() == 1:
                temp_list.append("男")
            else:
                temp_list.append("女")
            temp_list.append(str(self.Entry_age.get()).strip())
            temp_list.append(str(self.Entry_mobile.get()).strip())
            temp_list.append(str(self.Entry_email.get()).strip())
            temp_list.append(str(self.Entry_home.get()).strip())
            temp_list.append(str(self.Entry_id.get()).strip())
            temp_list.append(str(self.Entry_studyin.get()).strip())
            temp_list.append(str(self.Entry_pro.get()).strip())
            temp_list.append(str(self.Entry_emcon.get()).strip())
            temp_list.append(str(self.Entry_emtel.get()).strip())

            # 添加到all_student_list
            self.all_student_list.append(temp_list)
            # 提醒添加成功
            showinfo("系统消息","学生信息添加成功")
            # 关闭窗体
            self.destroy()

三、完善添加的操作

1. 需求

我们希望添加完善后,主窗体的表格能自动刷新,这样才能让用户觉察到,哦,数据确实添加进去了;

2. 思路

怎样在点击保存按钮时,主窗体表格自动刷新呢,实际上只要在主窗体执行load_all_student方法即可。

屏幕快照 2020-08-12 下午12.25.27.png

点击明细窗体的“保存”按钮,反馈信号(整数1),主窗体接收到信号,执行load_all_student方法;
点击明细窗体的“关闭”按钮,反馈信号(整数0),主窗体接收到信号,什么都不做。

3. 方法

我们再明细窗体里给commit()函数添加一个反馈信号,

self.userinfo = 1

同时给colse_window()函数添加反馈信号:

self.userinfo = 0

然后回到主窗体,在加载明细窗体的方法中load_detail_window(),将我们实例化的detail_window对象作为参数传入self.wait_window()方法中,这样就可以获取detail_windowuserinfo属性(反馈信号)了。

def load_detail_window(self):
    detail_window = detailgui.DetailWindow(self.action_flag,self.current_student_list,self.all_student_list)
    self.wait_window(detail_window)
    return detail_window.userinfo

然后修改add_student()方法,如果反馈信号是1则加载全部学生信息到Treeview中,否则就什么都不做。

def add_student(self):
    self.action_flag = 2
    if self.load_detail_window() == 1:
        self.load_all_student()
    else:
        return
最终效果:
1.gif

至此,我们实现了添加学生信息,并且实现了在主窗体的TreeView中立即显示结果。

最后

本节完成了,本项目添加学生信息的功能,这一套基础的操作流程希望大家能够理解。只要添加操作的流程理解了,后面再对学生信息进行修改、删除、保存也就不难了。我们下一节将实现学生信息的修改、删除、保存功能,尽请期待吧~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354