PyQt完整软件综合案例:登录框
基于教材《PyQt编程快速上手》5.4登录框开发实战。部分基础知识:
《快速掌握PyQt5》第五章 完善登录框小程序:https://zhuanlan.zhihu.com/p/75527971
《快速掌握PyQt5》第十四章 快速制作界面Qt Designer:https://zhuanlan.zhihu.com/p/75673557
《快速掌握PyQt5》第二十五章 Pyinstaller打包:https://zhuanlan.zhihu.com/p/86966093
白月黑羽 - 动态加载UI文件(视频):https://www.bilibili.com/video/BV1cJ411R7bP?p=5
白月黑羽 - 动态加载UI文件(代码):https://www.byhy.net/tut/py/gui/qt_03/#%E5%8A%A8%E6%80%81%E5%8A%A0%E8%BD%BDui%E6%96%87%E4%BB%B6
Anaconda创建、使用、删除Python虚拟环境:https://zhuanlan.zhihu.com/p/594405403
第一步 前端设计
使用pyqt5-tools库自带的Qt Designer以可视化的形式完成:

保存的格式为“.ui”,保存在准备好的文件夹内:

第二步 加载.ui文件
方法1:采用python自带工具pyui5
方法1的外部工具方案:先添加为外部工具,然后使用。


方法1的代码实现方案:使用代码调用pyui5,参考https://www.byhy.net/tut/py/gui/qt_03/#%E8%BD%AC%E5%8C%96ui%E6%96%87%E4%BB%B6%E4%B8%BApython%E4%BB%A3%E7%A0%81

方法2:使用PyQt5库的uic,加载ui定义
参考资料:https://www.byhy.net/tut/py/gui/qt_03/#%E5%8A%A8%E6%80%81%E5%8A%A0%E8%BD%BDui%E6%96%87%E4%BB%B6
把原先的:
改成
对于类内部函数,添加内容:(但在实际操作中,因为对“面向对象”的操作不熟悉,只输出了空程序框,这部分内容读者可以自行摸索)
第三步 后端编程
1. 先前加载出的UI模块login_ui.py
2. 窗口逻辑模块window.py
3. 主程序main.py
第四步 测试(打包前)

第五步 打包
1. 基础打包法:多文件打包模式(cmd命令)
生成三个文件:build文件夹里是编译文件,可删除;dist文件夹(89.3MB)是软件本体,内有main.exe;main.spec是打包配置文件,用来打包,因为打包好了,所以可删除。对于login_ui.py中用到的com_it.jpg文件,需要手动复制到main文件夹才能生效(main.exe所在的文件夹)。也就是说,程序中的资源文件都是需要手动复制的,解决方法见下文第5条。

2. 单文件打包模式
dist文件夹内只有一个main.exe(单文件,34.8MB)。但因为涉及压缩、解压的过程,程序运行会变慢。
3. 取消exe运行时的调试黑框
4. 给可执行文件exe加上图标
提前在目录内准备好一个图标,再运行cmd:(可能需要移动一下exe的路径,图标才变化)


5. 资源文件自动打包
免去手动复制的麻烦:
本例中,就是用:(多文件打包模式)
如果是单文件打包模式,在login_ui中加上res_path函数,并给函数中的各个路径套上:
套上路径:
cmd指令:
图标成功显示:(好累啊……)

6. 减小打包后的体积
方向1:采用虚拟环境(实测似乎对PyQt的效果不佳)
应该还有别的方法。我是查到可以采用Anaconda Prompt创建虚拟环境:https://zhuanlan.zhihu.com/p/594405403
如图,创建成功:

然后给虚拟环境安装库:
修改路径,然后打包:
新的打包文件由34.8MB降到34.1MB,我晕😵

关闭环境、移除虚拟环境、查看已安装环境:
可见成功移除:

方向2:移除指定的库
新的打包文件由34.8MB降到34.8MB,绝了

方向3:使用UPX工具
官网:https://upx.github.io/
我用的是upx-4.0.2-win64版本,解压后放在main.py所在文件夹后(或者添加到环境变量中),运行cmd:
新的打包文件由34.8MB降到27.3MB,什么叫专业啊!

第六步(最后一步) 完善
发现忘记加-w了,加!再exclude一下,叠个buff。来!
exclude之后体积还更大了……下次不ex了😡

启动!——


