将使用Tkinter编写的带图片的程序打包成exe文件,并且实现图片内嵌

在程序编写完成后,我使用Pyinstaller对项目进行打包,最后得出了1个exe可执行文件,但由于项目引用了一些图片,因此需要将这些图片文件和exe文件放在一起才可以正常运行文件。

这将造成很多问题如拷贝过程不方便,而且会造成安全隐患(其他使用者只需要替换图片文件即可修改内容),在查阅资料后我决定将图片内嵌。

首先,编写函数,将图片转换为base64编码格式:

import base64

def pictopy(picture_names, py_name):
    write_data = []
    for picture_name in picture_names:
        filename = picture_name.replace('.', '_')
        open_pic = open("%s" % picture_name, 'rb')
        b64str = base64.b64encode(open_pic.read())
        open_pic.close()
        write_data.append('%s = "%s"\n' % (filename, b64str.decode()))

    f = open('%s.py' % py_name, 'w+')
    for data in write_data:
        f.write(data)
    f.close()

紧接着,将这串编码写入对应的文件中:

if __name__ == '__main__':
    pics = ["fomula.png"] # fomula.png是图片名
    pictopy(pics, 'fomula') # fomula是被写入的文件名
    print("写入程序成功!")

“fomula.png”是图片的名称,而我们图片被转换后的编码将显示在fomula.py文件中,打开后是这样:

fomula_png = "iVBORw0KGgoAAAANSUhEUgAAAuYAAABrCAYAAAA7KEd8AAAgAElEQVR4nO2dTcxdVdXHr69arIrEihFrxY9qomKJBD+ColVihWhCQxrSEFITmJQB6YgRE14mjByRDsoEkxJSCWkImBgIBINCGjANCH6QqGiQCErFqCUFHPj6O7ied3M53+fcc8699/dLbu7zde9z7tlr7/3fa6+19lv+/R9mIiIiIiIyKv8z9gWIiIiIiIjCXERERERkEijMRUREREQmgMJcRERERGQCKMxFRERERCaAwlxEREREZAIozEVEREREJoDCXERERERkAijMRUREREQmgMJcRERERGQCKMxFRERERCaAwlxEREREZAIozEVEREREJsDbxr4AkWXm0KFDsz//+c+d3+eGG27o4WpkamgfMjbaoFShjUwLhblIR84999zZZZddNvZlyETRPmRstEGpQhuZDoayiHQAL8O2bdvGvgyZKNqHjI02KFVoI9NCYS4iIiIiMgEU5iIt+f3vf589n3nmmSNfiUwR7UPGRhuUKrSR6aEwF2nJiRMnsuePfexjI1+JTBHtQ8ZGG5QqtJHpYfKnrC14Ch577LEsvu5vf/tb9rP3vve9s/POO2/21a9+deSrk7H52c9+Nnv66acz+3j55Zezn334wx+effGLX5x99rOfHfnqZB3QBqWKBx54YPbss8/OXnjhhdm//vWv2dvf/vbMRr797W/P3ve+9419edIChbmsLU888UQ26X3hC1/IBjGE+tGjR2cPPvhglghT5UF48cUXMyEvq8nx48dnL7300mzXrl2ZjSCSfvSjH2U/qyOKtA/pijYoVTzyyCNZG19xxRXZnHXXXXfNnnzyycxO9u3bV/l6bWR6GMoiaw0DEqIcGNS2b9+efR3be2W8+uqrs02bNi30+mRcsAcEEfD8gQ98YMNzWYX2IX2gDUoV7PKGIylKHmojy4sec1lb8mq2smXMVuDHP/7xyte/9tprDmgrzDXXXPOG7//6179mnkqEUR20D+mKNihVzB/qw64KaCPLi8Jc5D/84he/yOLNGaQuvfTSWrF5xKXXHfxkufnpT386e/zxx2dnnXXWbPfu3bVeo31In2iDUgaLNuyDeazJYUHayPRQmMvac+ONN258XcdTLutDxPQCOylOYDI02qBUEXHl8K53vWt22mmnjXxF0gWFuaw9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
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装pyinstaller ``` pip install pyinstaller ``` 2. 创建.spec文件 在命令行中进入程序根目录,执行以下命令 ``` pyinstaller -w -F main.py ``` - `-w`:表示使用窗口模式,不显示命令行窗口 - `-F`:表示打包单个可执行文件 打包后会生一个`main.spec`文件 3. 修改.spec文件 打开`main.spec`文件,修改以下内容: ``` a = Analysis(['main.py'], pathex=['路径'], binaries=[], datas=[('界面文件路径', '界面文件路径'), ('图片文件路径', '图片文件路径')], hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='程序名称', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], upx_include=[], runtime_tmpdir=None, console=True ) ``` - `路径`:为程序的绝对路径 - `界面文件路径`:为程序使用的界面文件的路径 - `图片文件路径`:为程序使用图片文件的路径 - `程序名称`:为打包后的程序名称 - `console=True`:表示使用命令行模式,如果之前用`-w`表示使用窗口模式,则需要将此行改为`console=False` 4. 生可执行文件 在命令行中进入程序根目录,执行以下命令 ``` pyinstaller main.spec ``` 打包后,可执行文件位于`dist`文件夹下。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值