kivy - 带有 PyInstaller 挂钩的 KivyMD - 图像未显示在独立 .exe 中
问题描述
目标
我正在使用带有 PyInstaller 钩子的 kivymd 来创建独立的 .exe。
问题
除了未显示的图像外,在独立的 .exe 中一切正常。
请注意,图像显示在从脚本执行的应用程序中,但不显示在独立应用程序中。
图片的位置
图像存储在名为“媒体”的文件夹中,并与脚本中的相对路径链接。请参阅下面有关 MDToolbar 中“myicon.png”的示例
MDToolbar:
title: "My title"
left_action_items: [['media\myicon.png', lambda x: None]]
elevation: 10
文件.SPEC
按照文档(this和this)在独立设备中添加图像/文件,我创建了一个如下所示的规范文件:
# -*- mode: python ; coding: utf-8 -*-
import sys
import os
from kivy_deps import sdl2, glew
from kivymd import hooks_path as kivymd_hooks_path
path = os.path.abspath(".")
added_files = [
( 'media\myicon.png', 'media' ) # Single file
# ( 'media/myicon.png', '.' ), # Single file
# ( 'media/myicon.png', '.' ), # Single file
# ( '/media/data', 'data' ), # Folder
# ( '/media/*.png') # multiple files # prova mia
# ( '/media/sfx/*.mp3', 'sfx' ) # multiple files
# ( '.\\media\\myicon.png', 'media' ) # # hookspath='.\\hooks\\',
]
a = Analysis(
["main.py"],
pathex=[path],
hookspath=[kivymd_hooks_path],
datas = added_files,
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=None,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=None)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
debug=False,
strip=False,
upx=True,
name="myname",
console=False,
icon='myicon.ico'
)
如您所见,在“added_files”(元组列表)中,我还尝试了其他选项(现已注释掉),但没有人允许图像出现在独立文件中。
目前我认为这个问题可能与两个可能的问题之一有关:
- 语法错误(例如 'media\myicon.png', 'media' )
- “added_files”、“datas = added_files”、“a.datas”关联相关的逻辑是错误的。
你能帮我解决吗?提前致谢
解决方案
根据我的经验,我使用了以下表格:
added_files = [ ( 'media/myicon.png', 'media' ) # Single file]
使用正斜杠。
然后在我的顶部main.py
添加:
if getattr(sys, 'frozen', False):
# this is a Pyinstaller bundle
kivy.resources.resource_add_path(sys._MEIPASS)
kivy.resources.resource_add_path(os.path.join(sys._MEIPASS, 'media'))
推荐阅读
- symfony - 如何将 Dockerized Symfony 应用程序部署到 Digital Ocean
- visual-studio-code - 如何删除除 Markdown 之外的所有文件中的尾随空格?
- c - 使用 clang 编译具有 readline 支持的 C 程序
- c# - Environment.GetFolderPath() 不支持哪些平台?
- macos - 在没有 Brew 的 Mac OS X Lion 上安装 OpenMP
- parsing - Ocaml 运行时解析器生成器
- angular - 输入上的 Angular Material 占位符不流动
- gcc - 使输出不连贯的错误消息
- python - 分组和聚合列,但如果值不匹配则创建 NaN
- qt - 当为常规样式图标定义 FontLoader 时,不要使用 Font Awesome 中的纯色样式图标