用pyinstaller打包pyqt5下的GUI python程序(含图片资源和qss文件)

pyinstaller的用法网上传的很多,实际上大家最关心的问题是,怎么把图片文件、qss样式表等不是以.py结尾的文件统统打包到一个.exe

这里我尝试了多种方法,总结出了一种有效的途径

首先介绍一下pyinstaller的特点,它会去寻找并打包那些依赖项以及你给出的.py文件,而对于图片文件,如.jpg.png;qss样式文件,如.qss等,pyinstaller是不会帮你打包进exe的,那么我们可以灵活变通一下,把所有的图片、qss文件全部转化成python文件,那岂不是可以直接被打包进exe了吗

转化方式就是,把图片、qss全部变成字符串写到某个.py里,等到使用的时候再做处理即可,下面我各自举例:

图片转化成python文件

之前我使用的图片是这样的:

我写了一个img2py.py的程序,将图片转化成python文件

# -*- coding: utf-8 -*-
import base64
def pic2py(picture_name):
    """
    将图像文件转换为py文件
    :param picture_name:
    :return:
    """
    open_pic = open("%s" % picture_name, 'rb')
    b64str = base64.b64encode(open_pic.read())
    open_pic.close()
    write_data = 'img = "%s"' % b64str.decode()
    f = open('%s.py' % picture_name.replace('.', '_'), 'w+')
    f.write(write_data)
    f.close()


if __name__ == '__main__':
    pics = ["pic.jpg"] # 在这里放上你要转化的文件名即可
    for i in pics:
        pic2py(i)

转化完成后你的目录下就会多出了一个pic_jpg.py文件,内容如下:

qss文件转化成python文件

qss的转化比较简单,把所有的qss的内容用一个三引号括起来,放入一个新建的python文件即可,内容如下:

在主程序中对pic.py和qss.py的使用

首先将两个python文件导入主程序

from pic_jpg import img # 对应pic_jpg.py
from qss import qss # 对应qss.py

然后在main函数里对图片进行解码,重新生成jpg图像;并引用qss样式:

def main():
    tmp = open('pic.jpg', 'wb') #将原先的pic_jpg.py写入pic.jpg的图片文件
    tmp.write(base64.b64decode(img))
    tmp.close
    ...
    Qss=qss # 直接将qss这个字符串给QSS即可
    app = QtWidgets.QApplication(sys.argv)
    app.setStyleSheet(Qss)
    ...
使用pyinstaller打包

首先我们需要将pyqt的bin路径找出(pyinstaller 无法准确获取 Qt动态库文件路径,打包生成的文件 xxx.exe 内缺少相关依赖),一般为...\Python37\Lib\site-packages\PyQt5\Qt\bin

然后打开cmd到当前目录,这里我们用到了多个python文件,其中app.py为主程序,我们应当这样写:

pyinstaller --paths C:\...\Python37\Lib\site-packages\PyQt5\Qt\bin -i MIPS.ico -F -w app.py MyHighLighter.py pic_jpg.py qss.py

这里的-F是打包成一个exe文件的意思,-w是不使用控制台的意思,-i .ico是使用exe图标的意思

打包成功:

此时在dist文件夹内,只有一个exe程序

点击运行后,会自动在当前目录生成pic.jpg文件

程序运行成功:

此时我们可以创建该应用的快捷方式到桌面,点击运行后并不会在桌面生成新的图片,而是一直使用原先目录下的那张图片

  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PyInstaller是一个用于打包Python文件的库,可以将Python脚本转换可执行文件。对于使用PyQt5编写的脚本进行打包,首先需要确保已经安装了PyInstallerPyQt5。然后,可以按照以下步骤进行打包: 1. 打开终端或命令提示符窗口,并切换到包含主函数文件的目录。 2. 运行以下命令:`pyinstaller your_script.py`,其中"your_script.py"是你要打包的脚本的文件名。 3. PyInstaller将开始分析脚本并创建.spec文件,该文件包含有关打包过程的配置信息。 4. 在.spec文件中,你可以对打包过程进行更多的自定义配置。可以使用文本编辑器打开.spec文件并进行修改。 5. 对于PyQt5脚本,通常需要添加额外的参数来解决特定的问题。例如,如果脚本中使用了Qt的平台插件(例如QtWebEngine),可能需要使用`--add-data`参数来包含这些插件。具体的参数配置可以参考PyInstaller的文档。 6. 修改完.spec文件后,运行以下命令:`pyinstaller your_script.spec`,其中"your_script.spec"是你修改后的.spec文件文件名。 7. PyInstaller将开始根据.spec文件进行打包。在打包后,你将在当前目录中看到一个名为"dist"的文件夹,里面包含打包后的可执行文件。 需要注意的是,PyInstaller打包过程可能因为项目的复杂性而有所不同。建议在打包前仔细阅读PyInstaller的文档,并根据你的具体需求进行适当的配置和调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [pyinstaller打包pyqt5项目总结](https://blog.csdn.net/Sheleon1995/article/details/125041861)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [pyinstaller打包pyqt5程序 全过程 超详细](https://blog.csdn.net/okfu_DL/article/details/84566545)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值