首先,说明下使用ptstaller打包qt图形程序遇到的“This application failed to start.” 问题,与在安装PySide2后运行一个简单的qt图形程序后遇到的 “This application failed to start because no Qt platform plugin could beinitialized. Reinstalling the application may fix this problem.”问题不同(后者参考该文章点击该链接),后者需要在安装的PySide2路径下在__init__.py文件中添加一些信息。
先保证未打包的qt图形程序能正常运行,我的qt图形程序路径为F:\PycharnProjects\learningProjects\Qt\t4\hospital_info_sys.py,之后使用在改qt图形程序的路径下执行pyinstaller hospital_info_sys.py --noconsole --hidden-import PySide2.QtXml
,之后会在F:\PycharnProjects\learningProjects\Qt\t4路径下生成一个dist文件夹和bulid文件夹,见下图
之后进入dist/hospital_info_sys,往下拉文件滚动条会看到一个hospital_info_sys.exe文件。然后将原来hospital_info_sys.py中需要动态加载的.ui文件复制到dist/hospital_info_sys下(最好在编写hospital_info_sys.py时将待加载的.ui文件放到同级目录下,例如self.ui = QUiLoader().load('hospital_info_sys.ui')
)。此时直接点击改exe文件,会出现下面的错误
解决办法:错因是打包的文件dist\hospital_info_sys\PySide2\plugins\platforms下中只有4个dll文件,但是在自己一开始安装的PySide2下面的有5个dll文件(在Anaconda3\Lib\site-packages\PySide2\plugins\platforms下)。因此只要把PySide2下的platforms文件夹(包含5个dll文件)直接代替打包的dist\hospital_info_sys\PySide2\plugins\platforms即可。
仅压缩项目路径下F:\PycharnProjects\learningProjects\Qt\t4\dist下的 hospital_info_sys文件夹