python-3.x 使用pyinstaller编译的tkinter程序无法加载图像

zbsbpyhn  于 11个月前  发布在  Python
关注(0)|答案(2)|浏览(159)

我有一个tkinter程序,其中包括一个.png图像。我已经使用pyinstaller和--onefile选项编译了它,所以我必须在一个临时位置访问图像。这是我使用的代码:

def resource_path(relative_path):
    try:
        base_path = sys._MEIPASS
    except Exception as e:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

个字符
下面是我的.spec文件:

# -*- mode: python -*-

block_cipher = None

a = Analysis(['XGols.py'],
             pathex=['C:\\Users\\Sam\\OneDrive\\Computing\\Python Projects\\FootballPredict'],
             binaries=[],
             datas=[('Ball.ico', 'Ball.ico'), ('xgol.png', 'xgol.png')],
             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='XGols',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True , icon='Ball.ico')


为了编译程序,我用途:

pyinstaller --onefile XGols.spec


This is the error that I get when I run the executable

_tkinter.TclError: couldn't open "C:\Users\Sam\AppData\Local\Temp\_MEI61842\xgol.png": permission denied


我试过当管理员。

lf3rwulv

lf3rwulv1#

在您的.spec文件中,其他数据文件应该像这样列出:

datas=[('Ball.ico', '.'), ('xgol.png', '.')]

字符串
从文档中:
每个元组有两个值,这两个值都必须是字符串:

  • 第一个字符串指定文件或文件现在在此系统中的位置。
  • 第二个指定运行时包含文件的 * 文件夹 * 的名称。
dddzy1tm

dddzy1tm2#

如果文件未找到错误:使用MEIPASS 2代替MEIPASS或反之亦然,然后\代替/(如果需要)。
我觉得这样比较容易:

import os
import sys

def resource_path(relative_path):
    try:
        base_path = sys._MEIPASS # after running the pyinstaller, if still looking
        # for temp folder then use sys._MEIPASS2 and if needed \\ instead of / for
        # all the path directories
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)

字符串
更换

"folder_names/file_names"


resource_path("file_names/file_names")


在终端类型:

pyinstaller.exe --onefile --windowed  --icon=your_image.ico Your_File.py


或在windows CMD中(在cmd中安装pyinstaller后)键入:

pyinstaller --onefile --windowed --icon=your_image.ico Your_File.py


可执行文件将在名为“dist”的新文件夹中提供。
现在复制所有的从属文件夹到“dist”文件夹
运行.exe,如果一切正常,然后压缩文件夹以共享。
删除Build and Dist文件夹以及任何.spec文件沿着。
更换

resource_path("folder_names/file_names")


"folder_names/file_names"


要进一步将其转换为安装程序安装文件,请使用“inno setup”软件。

相关问题