Изображение не загружается для программы tkinter, скомпилированной с помощью pyinstaller - PullRequest
0 голосов
/ 26 июня 2019

У меня есть программа 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)
title = PhotoImage(file=resource_path("xgol.png"))

Вот мой файл .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

Это ошибка, которую я получаю, когда запускаю исполняемый файл

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

Я пытался работать от имени администратора.

1 Ответ

0 голосов
/ 27 июня 2019

В вашем файле .spec дополнительные файлы данных должны быть перечислены следующим образом:

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

С документация :

Каждый кортеж имеет два значения, каждое из которых должно быть строкой:

  • В первой строке указывается файл или файлы в том виде, в котором они находятся в этой системе.
  • Второй указывает имя папки для хранения файлов во время выполнения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...