Python PyQt/PySide-图标显示
我有一个PySide应用程序,它有一个用于Python PyQt/PySide-图标显示,python,pyqt,pyqt4,py2exe,pyside,Python,Pyqt,Pyqt4,Py2exe,Pyside,我有一个PySide应用程序,它有一个用于主窗口的图标(一个QMainWindow实例)。当我正常运行文件时,图标是可见的,一切正常,但当我使用py2exe创建一个exe时,图标不会出现。这在cx\u freeze中也会发生(因此我认为问题不在于py2exe) 该应用程序是使用QtDesigner设计的,并使用pyside uic转换为python。我尝试将图标用作文件和资源(qrc文件),但两者似乎都不起作用 任何帮助或指点都将不胜感激 谢谢。我假设它与bmp一起工作,而不是png/jpg?如
主窗口的图标(一个QMainWindow
实例)。当我正常运行文件时,图标是可见的,一切正常,但当我使用py2exe
创建一个exe时,图标不会出现。这在cx\u freeze
中也会发生(因此我认为问题不在于py2exe
)
该应用程序是使用QtDesigner
设计的,并使用pyside uic
转换为python。我尝试将图标用作文件和资源(qrc文件),但两者似乎都不起作用
任何帮助或指点都将不胜感激
谢谢。我假设它与bmp一起工作,而不是png/jpg?如果是这样的话,很可能是图像格式插件加载不正确
我猜在已安装应用程序的目录中设置一个文件,并确保插件dll转到/plugins/imageformats/将使事情更好地工作。这可能与Windows 7的任务栏图标处理有关吗
请参阅以获得答案。我也有同样的问题。经过调查,我找到了一个解决方案:
(麦克的想法是对的)
cx\u freeze
不复制PyQt
plugins目录,该目录包含ico
图像读取器。
以下是步骤:
在setup.py
中,将PyQt4
插件目录复制到您的发行版
在代码中编写如下内容:
只要您不尝试将Qt DLL捆绑到library.zip或exe中,Kochelmonester的解决方案就可以工作。如果将插件放在应用程序目录的底部,也不需要设置库路径
我仍然想捆绑其他所有东西,所以我排除了qt DLL并手动添加它们。My setup.py的外观如下所示:
from os.path import join
_PYSIDEDIR = r'C:\Python27\Lib\site-packages\PySide'
data_files =[('imageformats',[join(_PYSIDEDIR,'plugins\imageformats\qico4.dll')]),
('.',[join(_PYSIDEDIR,'shiboken-python2.7.dll'),
join(_PYSIDEDIR,'QtCore4.dll'),
join(_PYSIDEDIR,'QtGui4.dll')])
]
setup(
data_files=data_files,
options={
"py2exe":{
"dll_excludes":['shiboken-python2.7.dll','QtCore4.dll','QtGui4.dll'],
"bundle_files": 2
...
}
}
...
)
如果您的项目使用额外的Qt DLL,您将不得不排除并手动添加它们。如果您需要加载.ico映像以外的内容,还需要添加正确的插件。您必须在发布文件夹中手动包含“qico4.dll”。在setup.py中插入以下内容:
import sys
from os.path import join, dirname
from cx_Freeze import setup, Executable
_ICO_DLL = join(dirname(sys.executable),
'Lib', 'site-packages',
'PySide', 'plugins',
'imageformats', 'qico4.dll')
build_exe = {
'include_files': [(
_ICO_DLL,
join('imageformats', 'qico4.dll'))]}
setup(name = "xxxxx",
version = "1.0.0",
...
options = { ...
'build_exe': build_exe
...},
...)
实际上,它是一个.ico文件。我无法让图标正常工作,决定将应用程序切换到wxpython,这里有一个将图像转换为python文件的工具。有了它,我在最终的可执行文件中没有任何问题。因为我使用wxformbuilder来构建UI,所以转换应用程序也不需要太长时间。谢谢。@user547057:啊。这是一个py2exe/cz_冻结问题,而不是一个Qt问题。嗨,谢谢你的回答。这是可行的,但我必须用“\\”而不是/”将图像或图标路径更改为其绝对路径。尽管pyinstaller不需要任何安装文件,但它仍然可以工作。我喜欢将图标放入.qrc资源文件中,并将其编译为python代码,以避免类似的路径问题。您也不必担心确保图标和图像包含在构建脚本中。所以你可能想再次尝试使用它们。@Gerald-你有什么特别的理由把shiboken包括在这个答案中吗?据我所知,如果没有它,一切正常。@ArtOfWarfare早就出现了,当时这是使它工作所需的最小.dll(通过反复试验确定)。完全有可能2年后不再需要shiboken了。我做了一个要点,展示了在PyQt中使用它。我迟早会和皮赛德一起做的。更好的是,只需将imageformats
文件夹复制到二进制文件所在的位置。
import sys
from os.path import join, dirname
from cx_Freeze import setup, Executable
_ICO_DLL = join(dirname(sys.executable),
'Lib', 'site-packages',
'PySide', 'plugins',
'imageformats', 'qico4.dll')
build_exe = {
'include_files': [(
_ICO_DLL,
join('imageformats', 'qico4.dll'))]}
setup(name = "xxxxx",
version = "1.0.0",
...
options = { ...
'build_exe': build_exe
...},
...)