SCI论文(www.lunwensci.com):
摘 要 :本文从工作实际出发,针对目前从上交的军事训练情况报告表中提取待统计数据很不方便的情况,基于 Python+PyQt5 开发平台,设计并实现了一款具有图形界面的自动化工具,该工具完成了报告表的自动生成、统计报告表数据并绘图展示的功能。 本文对该工具功能模块划分、工作流程及代码开发逻辑进行了详细阐述,最后对程序进行打包。该工具可以在一定程度上减少 数据录入人员、数据统计人员的劳动强度,帮助其快速生成业务所需文件,提高了训练管理的效率,具有一定的实用价值。
关键词 :Python ;PyQt5 ;军事训练统计 ;自动化 ;训练管理
Design and Implementation of an Automated Toolfor Military Training Statistics
LONG Yu, ZHANG Yong, SHEN Zhengyi
(Air Force Early Warning Academy, Wuhan Hubei 430019)
【Abstract】:This article starts from practical work and addresses the inconvenience of extracting statistical data from the current military training situation reports submitted to the superior authorities. Based on the Python+PyQt5 development platform, a graphical user interface automation tool was designed and implemented. This tool can automatically generate reports, collect statistical data, and display graphs. The article provides a detailed explanation of the tool's functional modules, workflow, and code development logic, and concludes with the program packaging. This tool can reduce the workload of data entry and data analysis personnel to some extent, helping them quickly generate the necessary documents for their work, thereby improving the efficiency of training management and having practical value.
【Key words】:Python;PyQt5;military training statistics;automation;training management
0 引言
军事训练是部队经常性中心工作,是我军保持高度 战斗力和战备状态的关键活动,在军事训练中,对各项 训练任务的统计对于提升军队战斗力和作战效能有着至 关重要的作用,它可以帮助军队分析训练效果,了解官 兵训练水平和状况,纠正训练中存在的问题。通过对训 练数据的整理分析,军队能够及时制定科学合理的训练 计划,为各种战斗任务做好充分的准备,从而提高军队 战斗力和打赢能力。目前基层部队的军事训练数据在上 报时,是将数据填写在规定的军事训练情况报告表中, 报告表的存储形式为 Word 文件中的表格。
随着信息技术的快速发展,对军事训练数据的处理和管理也进入了全新的时代,对数据统计人员来说,从 上报的报告表中手动提取数据进行统计分析和填写报告 很不方便,无法满足日益复杂、快速变化的训练管理需 求,在这种情况下,本文根据工作需要,使用 Python 语言进行软件开发,设计实现了一个军事训练情况统计 的自动化工具,利用直观的图形界面和可视化的便捷操 作完成对军事训练数据的录入、汇总统计以及将统计数 据可视化,从而提高了相关人员的工作效率,缩短了编 写报告所用的时间成本,加强了部队精细化训练管理。
1 工具总体设计
1.1 Python 和 PyQt5
Python 作为一门解释型、易读写的编程语言,它语法简单,条理清晰,支持面向对象编程,可以让初学者快 速上手开发出解决问题的代码并验证功能。同时 Python 提供丰富的标准库和第三方库,可以实现各种功能,由 于其免费开源, 也让使用 Python 编写的程序具有良好 的可移植性,程序可以很方便地从 Windows 平台迁移 到 Linux 下。
Qt 是具有一整套高度直观、模块化的 C++ 库类的软 件开发框架,它有非常强大的图形用户界面(GUI)开 发库和丰富的控件集,具有较高的运行时性能。PyQt5 是 Python 对 Qt5 框架的封装, 在充分利用 Python 优 点的基础上, 结合 Qt 提供的工具、组件、事件处理机 制等,开发者能够快速进行 GUI 应用程序的开发,创 建出具有丰富功能和良好用户体验的界面。
1.2 工具总体框架
本工具在设计上主要分为“数据采集输入”和“数 据汇总可视化”两部分。在“数据采集输入”部分,用 户在界面输入大纲规定的单位、人员军事训练情况,工 具自动将录入数据输出到规范统一的军事训练情况报告 表文件中 ;在“数据汇总可视化”部分,则可以对所有 输入文件中的训练情况进行分类汇总统计,并选择所关 心的训练数据进行可视化展示。
1.3 工具开发步骤
在分析现有技术的基础上, 结合本单位统计业务实际 需求, 本工具基于 Python+PyQt5 开发平台, 在Jupyter Notebook 环境内完成代码开发,采用模块化设计的思 路,每个独立模块完成一个确定的功能。模块化设计如 图 1 所示,工具由主窗口模块进行展示,主窗口中调用 “数据采集输入”和“数据汇总可视化”两个子窗口, 在 每个子窗口模块中调用子模块来实现对应的功能,通过 面向对象类之间的关系建立起每个子模块之间的联系, 最终由模块间的协作来完成整个自动化工具的功能。工 具开发了生成 Word 报告模块、生成 Excel 报告模块、 数据汇总模块、数据可视化模块等。
具体来说, 首先使用 PyQt5 自带的 Qt Designer完成用户界面(UI)主窗口和子窗口的设计。UI 部分 完成后,根据 PyQt5 提供的 API(应用程序编程接口) 编写用户界面上按钮、文本框等控件的具体槽函数,与 文件进行交互,在主窗口类中完成子窗口类的扩充。 程序编写完成后需进行测试,调试修改 Bug,最后将 Python 文件打包成可执行程序进行发布。
2 界面设计
本文的自动化工具 UI 较为复杂,直接使用 Qt Designer 制作工具的主窗口和子窗口界面, Qt Designer 具有随时 预览界面效果图的优势,可以帮助我们加快开发 PyQt5 程序的速度。在 Qt Designer 中通过放置和拖曳不同的控 件完成了界面的快速设计和整体布局。通过 Qt Designer 设计的窗口界面,被保存在一个后缀为 .ui 的文件中,可 以使用 Python 类的继承机制和 PyQt5 的 API 从 .ui 文 件动态加载窗口并显示,然后需要完善对界面输入的业 务处理逻辑的功能开发, 并保存所有代码到 .py 文件中。 这样做符合 MVC(模型—视图—控制器)设计模式的 要求,做到了将前端(图形界面)和后端(业务逻辑) 分离,当图形界面发生变化时,业务处理逻辑代码无需 进行调整,使得自动化工具后续更易于维护和修改。
一个典型的 GUI 应用程序可以有多个窗口,分别 对应于所实现的不同功能,为了便于功能选取和统一管 理,本工具设计了一个主窗口和两个子窗口,在主窗口 和子窗口界面设计中用到的控件主要有标签、按钮、文 本框、表格、容器、布局等,将控件按位置摆放在界面 上,设置相应的属性,最后进行布局调整。需要指出的 是,在数据汇总可视化窗口的设计中,使用到 Python 第三方库 Matplotlib 中提供的基于 PyQt5 定义的衍生绘 图控件 FigureCanvasQTAgg,本工具在该控件基础上 派生出子类自定义控件 MyMplCanvas,存放在 .py 文 件中, 由于此控件在 Qt Designer 中没有直接提供, 需 要通过提升窗口控件这个功能来实现, 该功能可以通过Qt Designer 来实现 PyQt5 与 Python 的一些强大模块 之间的交互。如图 2 所示展示了使用 Qt Designer 设计 出来的子窗口界面,以及提升的窗口控件如何设置,从 而在 Qt Designer 中引入了 MyMplCanvas 类。
3 功能实现
自动化工具的界面业务逻辑使用 Python 编写具体的 代码实现,按照统计业务实际需求,划分了多个相互独 立、高内聚、低耦合的模块,每个模块负责特定的功能, 在模块化的基础上,创建相应的类对象,通过调用对象提 供的接口,并引入 Python 的第三方库来实现不同的任务。
3.1 数据采集输入窗口
对于数据采集输入窗口来说,具体的数据采集输入 流程图如图 3 所示。
首先动态加载设计的子窗口界面 .ui 文件并显示, 在窗口上将军事训练情况报告表拆分为了多个子表以便 录入,用户点击左侧的子表列表可进行切换,在右侧通 过 PyQt5 提供的文本框、下拉列表框、表格等引导用 户输入训练单位、时间以及训练数据,输入完成后,当 点击“保存”按钮时,会调用对应的 Python 代码(称 为槽函数)自动保存界面上所填写的全部数据,保存形 式为 Word 和 Excel 文件,其中自动化生成的 Word 报 告表符合规范,可直接提交给上级,生成的 Excel 报 告方便数据分析人员提取数据并统计,保存成功后使用 QMessageBox 弹窗提示用户,如图 4 所示。
在窗口创建并显示以后,界面程序就会一直等待接收用户的输入事件,也就是需要进行信号与槽的处理。 信号(Signal) 和槽(Slot)是 Qt 中的核心机制, 也是 在 PyQt5 编程中对象之间进行通信的机制,在 PyQt5 中 所有继承自 QWidget(所有用户界面元素的基类)的控 件都支持信号与槽机制。在 Qt 系统中,当界面上一个 控件被操作时,比如被点击、被输入文本、按下回车键 等,就会发出信号,表明一个动态事件发生了,当信号 发射时,与之相连接的槽函数将会被触发并执行,这里 的槽函数由开发者来具体编写对信号进行处理的代码。 在 PyQt5 中信号与槽通过 object.signal.connect() 方 法连接,代码如图 5 所示。
此处绑定的槽函数实现了以下几个功能 :用户点击 不同训练情况报告子表的时候,切换到对应的子表录入 区域以便用户输入 ;当用户在子表的单元格中输入完成 后,检查该单元格的输入是否为数字,如果不是就将单 元格内容清空,使用 QMessageBox 提示用户重新输 入 ;当用户点击保存按钮后,将窗口上填入的数据全部 存储到文件中去。
在保存时,先后调用了生成 Word 报告模块、生成 Excel 报告模块, 生成 Word 报告模块使用 Python-Docx 库对 Word 文件进行读写操作, 生成 Excel 报告模块使 用 Openpyxl 库对 Excel 文件进行读写操作。实现思路 是通过双层 for 循环遍历数据录入表格的行列,使用表 格控件的 API 获取所有单元格的内容, 在指定目录下自 动将输入数据存储到 Word、Excel 文件中, Word 文件 生成的是一张规范的军事训练情况报告表, Excel 文件则 将拆分后的子表数据分别存放在不同的 Sheet 页中。
3.2 数据汇总可视化窗口
对于数据汇总可视化窗口来说,具体的数据汇总可 视化流程图如图 6 所示。
首先导入自定义界面类,初始化窗口并显示, 点击 窗口的“选择”按钮时,弹窗提示用户选择需要进行汇 总统计的报告表文件夹,本工具将对指定文件夹下所有 文件中的训练情况进行分类汇总并生成 Excel 文件,随 后读取该汇总文件并将关注的数据进行可视化展示。
由于在数据汇总可视化窗口使用了非 Qt Designer 提供的绘图控件,不能直接动态加载 .ui 文件,需要将 其转化为包含界面定义类的 .py 文件,引用该 .py 文 件,从定义界面类中派生出自定义的窗口子类,调用父 类的 setupUi 方法才能成功进行窗口界面的初始化和显 示,然后再进行业务逻辑的槽函数代码实现。
点击“选择”按钮后,绑定的槽函数首先调用 PyQt5 中选择文件框 QFileDialog 的 getExistingDirectory 方 法,弹出选择目录对话框。选定某一确定的文件夹目录后,窗口将先后调用数据汇总模块、数据可视化模块。 数据汇总模块使用 for 循环遍历指定文件夹下的所有文 件,对文件中不同的训练情况报告子表的数据自动进行 分类汇总并存储到新的 Excel 文件中。数据可视化模块 使用 Pandas 库读取汇总后的 Excel 文件,根据统计分 析需要选择性提取数据并使用 Matplotlib 库进行自定 义统计图绘制,汇总后生成的条形统计图如图 7 所示。
3.3 主窗口
对于主窗口来说,具体的流程图如图 8 所示。
首先动态加载设计的主窗口界面 .ui 文件并显示, 用户点击左侧的功能列表,在右侧区域切换显示对应的 子窗口,不同子窗口的数据采集输入和数据汇总可视化 流程同上面一致。
主窗口左侧的树形结构控件绑定的槽函数将根据用 户选择的功能创建对应的子窗口对象,子窗口对象会被 纳入右侧的容器控件进行统一管理和最大化显示,不同 功能的子窗口对象只会被新建一次,当用户点击左侧列 表时,对应功能的子窗口对象已存在,则会将该子窗口 设置为主窗口右侧区域的焦点进行前端显示,数据可视 化展示如图 9 所示。
4 打包应用程序
开发出来的自动化工具要分发到基层部队使用,还 需要将 Python 程序打包,将编写的 .py 文件转换成可 执行文件(在 Windows 平台为 .exe 格式)。本文使用 Python 的第三方库 PyInstaller 实现打包,它可以将编写 的窗口业务逻辑 Python 程序本身及其所有依赖项自动打 包成一个独立的可执行文件,接下来只需要将生成的可执 行文件拷贝到目标计算机上,无需再安装 Python 解释器 和依赖项,简化了部署过程,打包生成的自动化工具运 行界面如图 10 所示。具体可以使用如下命令 :
pyinstaller -w -F mainGUI.py
执行完命令后会在当前目录下创建 dist 目录,并在 dist 目录下生成可执行文件 mainGUI.exe,此外还需要将存放设计的全部窗口界面 .ui 文件的文件夹拷贝到该目 录下,因为 PyInstaller 只能从 .py 文件中分析出需要哪 些开发者编写的代码文件和引用的依赖项,本文的自动 化工具运行时动态加载的资源文件,比如图片、Word、 Excel、窗口界面定义(.ui 格式)这些, PyInstaller 不 会自动进行打包。最后双击运行 mainGUI.exe,程序可 以顺利启动,检查其运行效果与我们在开发调试时一致。
5 结语
信息化浪潮下,军事训练情况统计的自动化是军队 训练管理的必然趋势和重要手段,具有广泛的应用前景 和深远的意义。本文阐述了军事训练情况统计自动化工 具的总体框架和开发步骤,对工具的界面设计与功能实 现做了详细的说明,最后将程序打包给用户使用。相比 以往人工提取军事训练情况报告表中数据并统计分析的过程,用户通过该软件可以更简易、快捷地填报和汇总 军事训练情况,提供的训练数据可视化功能可以帮助训 练管理人员更直观地了解训练成果,发现训练问题,进 而优化训练方案,提高部队备战打仗能力。
本文所实现的军事训练情况统计自动化工具界面简 洁、操作简便、运行稳定性好,在一定程度上减轻了人 工操作的负担,提高了数据处理和管理的效率及准确 性,为使用者提供了便利,具有良好的推广应用价值。 新时代新征程,本文的自动化工具未来仍存在一些值得 改进的地方 :如目前工具的 GUI 十分简单, 为了给用户 更好的体验效果,可以进行窗口样式的优化,使其更加 美观 ;从功能角度看,由于是从本单位工作实际出发, 工具目前的界面设计和功能实现只涉及到单一军兵种, 未来可以在工具上添加其他军兵种的训练情况统计功 能,也可以通过用户指定统计数据,实现自定义绘图。
参考文献
[1] 王硕,孙洋洋.PyQt5快速开发与实战[M].北京:电子工业出 版社,2017.
[2] 卢玲,漆为民.基于PyQt5的求解线性方程组软件的设计与实 现[J].江汉大学学报(自然科学版),2023,51(1):18-27.
[3] 陶文玲,侯冬青.PyQt5与Qt设计师在GUI开发中的应用[J]. 湖南邮电职业技术学院学报,2020,19(1):19-21.
[4] 周牧.基于PyQt5的量子系统建模中间件的设计[D].武汉:武 汉轻工大学,2020.
[5] 周乐尧,汪东红,刘淑梅,等.基于PyQt5的铸造过程数据管理 软件开发[J].计算机时代,2023(1):70-73+77.
关注SCI论文创作发表,寻求SCI论文修改润色、SCI论文代发表等服务支撑,请锁定SCI论文网!
文章出自SCI论文网转载请注明出处:https://www.lunwensci.com/jisuanjilunwen/74189.html