使用 PyQt 制作简易软件简明笔记
缘由
最近在统计多组数据的重复性,利用到了标准差相关的公式,自然而然想到是使用 Excel 来处理公式。总之,模板是实现了,将公式一步一步拆解,饶了一大圈,发现最后 Excel 本身就内置了求取标准差的函数,还不如不要让我知道这个结果呢,伤心: (
![]()
不过,这也带来了一些思考。自认为自己用 Excel 还算用得多的了,根本没有听过用过这样的内置函数,能不能写个简单的程序,只要将数据往里面一扔,就可以自动出来计算结果呢 —> 于是开始了折腾
Step 1 搭建环境
- 这里选择社区版的 Pycharm,免费,集成开发环境用起来也方便
- 程序开发使用的是 PyQt 框架
刚安装完 Pycharm,会检测系统中是否已经安装好了 python,如果恰好没有安装过,那么根据软件的建议安装即可
写好的代码中若检测有问题,Pycharm 会在对应的位置进行提示,如一下这段程序,刚安装的 python 肯定是没有 PyQT6 的程序包的,可以通过提示(小红灯泡处,Alt+Enter)进行安装
![]()
新建项目,新建 python 文件,粘贴如下代码进行测试:
1 | from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton |
![]()
很好,说明各种环境已经搭建好了!
Step 2 实现基础功能
接下来尽管提需求,从开发者的角度出发,一步步给 GPT 进行引导,从易到难,功能从简单到复杂
例如我开始给 GPT 提需求:
我提供一组数据,点击按钮之后,就可以在一个输出位置输出这组数据的标准差
1 | import sys |
![]()
好了,手动输入几组数据,确实能够计算出来标准差了,不过我们的数据来自 Excel,而且用逗号分隔数据的方式也不方便。于是就有了如下需求:
但是,你知道的,我的输入数据一般从 excel 中复制过来的,这种用逗号分隔数字的方式让我在输入的时候非常麻烦
1 | from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QPlainTextEdit, QLabel |
![]()
以上这组数据就是直接从 Excel 粘贴进去的。看来功能 GPT 是帮我们实现了
Step 3 完善程序
接下来按照上面的步骤,进一步提需求,进一步完善程序代码
例如,可以增加一些数据清洗、数据输入验证、错处处理、历史记录、导出数据等功能
也可以对程序进行拆分,不同功能的代码写到不同的 py 文件中
![]()
当前的程序结构为
1 | data_processor/ |
主程序
1 | import sys |
UI 界面
1 | from PyQt6.QtWidgets import QWidget, QVBoxLayout, QPushButton, QTextEdit, QLabel |
数据处理
1 | import numpy as np |
Step 4 打包程序
想要将整个程序打包成 exe 文件,这样方便在没有 python 环境时依然可以运行,步骤如下:
- 安装 PyInstaller 包(可以直接在 powershell 中安装)
- 使用 PyInstaller 打包脚本
1、在 PowerShell 中,运行如下命令
1 | pip install pyinstaller |
注意:前面已经安装了 python 程序,应该是可以使用 pip 命令了的。可输入 pip --version 命令查看。若该命令无法使用,很可能是没有将 python 解释器添加到环境变量中,可进行如下操作:
1 | C:\Users\Administrator\AppData\Local\Programs\Python\Python312\ |
这里的路径请替换为实际安装 Python 的路径
![]()
2、运行 pyinstaller 命令打包程序
1 | pyinstaller --onefile --windowed your_script.py |
--onefile:将所有内容打包成一个单独的.exe文件。--windowed:用于创建一个没有命令行窗口的图形界面应用。
打包完成后,会生成几个文件夹:
dist中包含生成的 exe 文件build中包含构建过程中的临时文件,可以删除。your_script.spec文件是 PyInstaller 的配置文件,可以根据需要进行修改。
![]()
![]()
恭喜你,得到了一款简易的小程序:)
续
明明程序实现的功能很简单,为什么生成的程序还那么大呢,例如生成上面的这个 exe 文件就有 50M。因为软件将一些必要的程序包(如 numpy 模块)都打包进去了,若之后再增加一些计算相关的各种功能进去,程序体积可能也只会大一丢丢吧
另外,打包时如何优化资源,排除掉一些不必要的模块还值得学学。不过,尽管文件体积大点,功能总算是实现了,还是蛮有成就感的








