问题描述
使用Qt Designer制作ui界面,因为在开发过程中要经常修改ui界面,所以选择在程序中动态加载.ui文件,而不是用pyuic5转换成.py文件,这样做的好处就是修改.ui文件后不需要每次都进行转换操作。最初采用的动态加载方式如下:
# 导入ui界面
self.ui = uic.loadUi("my_ui.ui", self)
而且这个ui界面中用到了一张本地图片image.png
,是在Qt Designer中的QLabel对象mylabel
中的pixmap
选项中导入的。
完成程序编写后,在pycharm中运行正常,但是当使用pyinstaller打包成exe文件后,发现程序运行不了,会提示找不到xxx.ui这样的错误。如果此时将.ui文件直接拷贝到exe文件所在的dist目录下,则程序可以运行,但是图片仍然加载不了。
问题的原因:在使用 PyInstaller 打包程序时,动态加载的 .ui 文件不会自动被包含在生成的 .exe 文件中,因此运行时找不到该文件。
解决方法
在网上搜了很久,大多数思路都是先生成**.spec文件**,然后在.spec文件中修改datas
列表,将本地资源(.ui文件、图片文件等)加入到这个datas列表中。然而,我尝试了多次,都没有成功。最后还是通过chatGPT4获得了解决方案。以下是具体步骤:
1. 修改主程序代码
在你的 Python 程序中,添加一个函数resource_path<