某些图标文件不显示在冻结的 PyQt5 应用程序中
Certain icon files do not display in a frozen PyQt5 application
我一直在开发一个我们希望广泛共享的 PyQt5 GUI 应用程序,因此我一直在尝试使用 py2exe 打包所有内容。所有程序功能似乎在包形式中都运行良好,唯一的例外是未显示某些自定义 SVG 图标。
在寻找我的问题的答案时,由于 this answer,我发现了 PyQt 的图像格式插件。然而,在我的发行版中包含图像格式并没有缓解这个问题。
以下是我的设置文件中的相关内容:
import sys
import os
from setuptools import setup
import py2exe
VERSION = '1.0.0'
includes = [
"PyQt5",
"PyQt5.QtCore",
"PyQt5.QtGui",
"PyQt5.sip",
]
PYTHON_DIRECTORY = sys.exec_prefix
PYQT_PATH = os.path.join(
PYTHON_DIRECTORY,
'Lib',
'site-packages',
'PyQt5',
'Qt5'
)
datafiles = [
("platforms", [os.path.join(PYQT_PATH, 'plugins', 'platforms', 'qwindows.dll')]),
("imageformats", [os.path.join(PYQT_PATH, 'plugins', 'imageformats', format) for format in os.listdir(os.path.join(PYQT_PATH, 'plugins', 'imageformats'))]),
(
"", [
r"c:\windows\syswow64\MSVCP100.dll",
r"c:\windows\syswow64\MSVCR100.dll",
os.path.join(PYQT_PATH, 'bin', 'Qt5Widgets.dll'),
os.path.join(PYQT_PATH, 'bin', 'Qt5Core.dll'),
os.path.join(PYQT_PATH, 'bin', 'Qt5Gui.dll'),
]
)
]
setup(
name='application',
version=VERSION,
packages=['model', 'view'],
url='',
license='',
windows=[{"script": "main.py"}],
scripts=['main.py'],
data_files=datafiles,
install_requires=[],
options={
"py2exe":{
"includes": includes,
}
}
)
PyQt5 中的 SVG 图标需要Qt5Svg.dll以及图像格式插件才能显示。将以下内容添加到 setup.py 应该可以解决问题:
datafiles = [
...
(
"", [
...
os.path.join(PYQT_PATH, 'bin', 'Qt5Svg.dll'),
]
)
]
进一步调试 py2exe 的有用提示:Sysinternals ProcMon 对于发现丢失的 DLL 非常有用。只需过滤您的应用程序名称并查找类似的“NAME NOT FOUND”条目:
我一直在开发一个我们希望广泛共享的 PyQt5 GUI 应用程序,因此我一直在尝试使用 py2exe 打包所有内容。所有程序功能似乎在包形式中都运行良好,唯一的例外是未显示某些自定义 SVG 图标。
在寻找我的问题的答案时,由于 this answer,我发现了 PyQt 的图像格式插件。然而,在我的发行版中包含图像格式并没有缓解这个问题。
以下是我的设置文件中的相关内容:
import sys
import os
from setuptools import setup
import py2exe
VERSION = '1.0.0'
includes = [
"PyQt5",
"PyQt5.QtCore",
"PyQt5.QtGui",
"PyQt5.sip",
]
PYTHON_DIRECTORY = sys.exec_prefix
PYQT_PATH = os.path.join(
PYTHON_DIRECTORY,
'Lib',
'site-packages',
'PyQt5',
'Qt5'
)
datafiles = [
("platforms", [os.path.join(PYQT_PATH, 'plugins', 'platforms', 'qwindows.dll')]),
("imageformats", [os.path.join(PYQT_PATH, 'plugins', 'imageformats', format) for format in os.listdir(os.path.join(PYQT_PATH, 'plugins', 'imageformats'))]),
(
"", [
r"c:\windows\syswow64\MSVCP100.dll",
r"c:\windows\syswow64\MSVCR100.dll",
os.path.join(PYQT_PATH, 'bin', 'Qt5Widgets.dll'),
os.path.join(PYQT_PATH, 'bin', 'Qt5Core.dll'),
os.path.join(PYQT_PATH, 'bin', 'Qt5Gui.dll'),
]
)
]
setup(
name='application',
version=VERSION,
packages=['model', 'view'],
url='',
license='',
windows=[{"script": "main.py"}],
scripts=['main.py'],
data_files=datafiles,
install_requires=[],
options={
"py2exe":{
"includes": includes,
}
}
)
PyQt5 中的 SVG 图标需要Qt5Svg.dll以及图像格式插件才能显示。将以下内容添加到 setup.py 应该可以解决问题:
datafiles = [
...
(
"", [
...
os.path.join(PYQT_PATH, 'bin', 'Qt5Svg.dll'),
]
)
]
进一步调试 py2exe 的有用提示:Sysinternals ProcMon 对于发现丢失的 DLL 非常有用。只需过滤您的应用程序名称并查找类似的“NAME NOT FOUND”条目: