最近在学习pyqt5, 使用pyqt5的时候出现了一些莫名奇妙的问题,解决之后决定把它记录下来,方面pyqt5的初学者使用。
每个问题会按照如下方式进行描述
1、问题描述:
2、解决方法:
问题1:
使用pyinstaller打包,生成的.exe文件不能运行怎么办?
解决方法:
PyQt5是第三方库,所以在打包的时候默认不会加到.exe文件去,所以需要指定pyqt5的路径。例如:
pyinstaller -p E:\Tools\Anaconda3\envs\py38_qt\Lib\site-packages -F main_calculator.py
Round 1
双击dist下面的.exe文件,但是出现下面问题:(2023.4.29 0:12 深夜了,明天再debug)
看了一下,是这个文件找不到,我使用的是动态加载ui文件,所以如果打包的话,还是只能静态用uci5将.ui文件打包为.py的文件调用。
---------------------2023.5.2------------------
Round 2
根据上述的排查后,转为静态加载ui文件,即用pyuic5将ui文件转为py模块,然后再main.py中调用该函数。
pyuic5 ./button.ui -o ./button.py
但是打包过后还是不行,会出现点击.exe后闪退的情况。
针对上述问题,解决方法:
我在csdn上找了一些哥们的方法,有个哥们介绍用录视频的方式查看。
我用qq录屏尝试,在cmd中没有任何提示。未遂,继续尝试解决方法。
直到这个哥们介绍的,用cmd窗口打开然后命令行运行.exe文件,而不是双击.exe文件运行。
这个时候出现了提示,No Module name ui_py,已经用静态加载代替动态了,为什么还会出现这样的情况?
针对上述问题,解决方法:
因为我把main.py和static_cal.py文件放在不同的文件夹下,VsCode运行项目的时候不会把根目录加载到sys.path中,然后我手动用下面的代码将其加入到path中:
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
但是打包还是出现问题,对于在本地运行没问题,打包他只会加载当前main文件下的文件,所以我将本项目的三个文件.ui 和main.py 和ui转py的三个文件全都放在一个文件夹下p1_cal然后再次打包,成功。