百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

off999 2024-11-11 12:48 30 浏览 0 评论

前言

在上一节中Python GUI项目实战(五)明细信息窗体的完善 ,我们完成了明细窗体的最终数据填充,双击任意一行即可显示该行学生的详细信息,完成了学生信息的查看,那么作为一个学生信息管理系统,能够向系统中添加学生信息也是一个必需的基础功能。所以本小节我们要实现学生信息的添加功能。

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

1. 添加数据的思路

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

思路01:

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

思路02:


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

2. 注意事项:

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

二、添加数据的实现

明细窗体已经添加了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方法即可。

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

3. 方法

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

self.userinfo = 1

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

self.userinfo = 0

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

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

最终效果:

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

最后

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

如果觉得文章还不错的话,希望能点赞评论关注转发支持一下,当然本项目所有的源码、素材、数据源都可以直接私信我免费获取,方便大家在实践中学习,最后,感谢大家的支持~^_^

相关推荐

ie浏览器官网入口(ie浏览器中文版官方下载)

没有手机版本的IE浏览器,所以就没有官方入口这一说法。用户还是使用手机自带的浏览器,或者在应用商店中下载其他的浏览器,比如夸克浏览器、X浏览器、QQ浏览器等等。1、进入手机浏览器,选择三字形的按钮。...

电信宽带测速手机版(中国电信宽带测速器)

可以使用网速测试工具进行测速。一般来说,打开浏览器,输入“速度测试”或“网速测试”等关键词,选择一个网速测试网站进行测速即可。测试时需确保关闭所有下载、上传、在线观看视频等网络活动,以免干扰测速结果...

用自己名字设计logo免费(店名设计logo免费生成器)

进入短信--设置--我的头像选择一照片设置即可微信在名字里加上小图标的步骤如下:1丶打开手机微信,在微信聊天框中输入你包含小图标的昵称,并长按复制。2丶之后点击微信中的设置选项。3丶点击红框中的昵称...

网页制作app手机版(网页在线制作app)

有区别图虫网登录麻烦,图虫app方便图虫网是一个专业摄影网站,有数十个摄影相关社区,有各个题材的图库,有大量注册摄影师上传照片并展示。优秀摄影作品可以出售卖钱。需要电脑网页登录。《图虫》APP是今日头...

ae剪辑软件下载(ae剪辑软件下载包)

如果你手头的插件正好是.aex后缀的话,直接复制到“X:\AdobeAfterEffectsCS4\SupportFiles\Plug-ins”里面。如果是.ffx的话那么这就是预置(可以直接用的加上...

google map下载(googlemap下载官网)

国内封杀了谷歌的,你打开就是空白什么也看不到的,网络需要使用VPN连接就可以使用了的,另外如果你要看卫星地图,不是下载那个谷歌地图,而是下载那个谷歌地球,但是使用的时候也是需要使用VPN连接的网络,首...

免费秒玩小游戏的网站(无需登录网页小游戏网站)
免费秒玩小游戏的网站(无需登录网页小游戏网站)

是的,秒玩小游戏是不需要下载的,因为秒玩小游戏有固定的系统承包,系统会帮助运行在手机上,所以秒玩小游戏是不需要玩家自己进行下载就可以进行游玩的斗鱼狼人杀游戏入口在哪里?想要找到这款游戏的话,我首先我们点开头条,然后找到任务。然后找到任务之后...

2026-01-17 06:51 off999

变态游戏盒子排行榜第一(最新变态游戏盒子)

如需下载第三方应用软件(好玩的游戏、常用工具应用、系统辅助工具等),建议可以通过自带的应用商店或手机论坛等搜索目前较为热门的软件。1、若您的手机自带应用商店,可以按照如下方式查找:应用程序-应用商店-...

手机同屏软件免费下载(同屏软件免费版)
  • 手机同屏软件免费下载(同屏软件免费版)
  • 手机同屏软件免费下载(同屏软件免费版)
  • 手机同屏软件免费下载(同屏软件免费版)
  • 手机同屏软件免费下载(同屏软件免费版)
东北大智慧手机版下载最新(东北大智慧安卓版)

上网下升级版安装包可以了

psp3000十大最耐玩的游戏(psp3000游戏排行榜)

有很多经典耐玩的游戏,包括《怪物猎人自由2》、《勇者斗恶龙IX》、《战神》、《上古卷轴:奥布里维恩》等等。 其中,《怪物猎人自由2》是一款非常有趣的动作游戏,游戏中玩家需要探索各种地图,与各...

开车游戏(开车游戏单机安卓版)

以前玩的开车游戏有《超车小能手》。《超车小能手》是一款第一人称3D模板驾驶赛车类游戏。游戏采用第一人称的视角,玩家可以选择不同的赛车类型。采用了第一人称驾驶赛车的方式进行游戏,进行了跑车引擎声音的还原...

已经停服的手游(已停服游戏大全)

停服了战区现在也已经开始进入到一个短暂的停服阶段,具体的原因主要是根据官方所说,这本身就是为了能够有效保持一种服务器的稳定,然后就会选择停服的操作。烈火如歌手游停运的原因是因为官方计划对游戏进行重制。...

cad官方正版下载(cad官方正版下载入口)

要下载CAD电脑软件,首先需要找到可靠的CAD软件提供商的官方网站。在官方网站上,您可以找到下载CAD软件的链接。点击链接后,您将被引导到下载页面,选择适合您操作系统的版本。然后,点击下载按钮开始下载...

pptv下载(pptv下载速度慢怎么解决)

步骤/方法1、请到http://www.pptv.com首页,点击“免费下载”2、点击“保存“3、选择存放“PPLive网络电视”的位置,点击“保存”4、等待“PPTV网络电视”下载完成5、下载完成...

取消回复欢迎 发表评论: