当前位置:   article > 正文

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

pyinstaller打包pyqt5成exe打包包含图片

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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

转化完成后你的目录下就会多出了一个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
  • 1
  • 2

然后在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)
    ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
使用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
  • 1

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

打包成功:

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

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

程序运行成功:

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/264476
推荐阅读
相关标签
  

闽ICP备14008679号