PyQt / PySide - 图标显示

时间:2011-01-01 12:09:06

标签: python pyqt pyqt4 py2exe pyside

我有一个PySide应用程序,其中包含MainWindowQMainWindow个实例)的图标。当我正常运行文件时,图标是可见的,一切都很好但是当我用py2exe创建一个exe时,图标不会出现。 cx_freeze也会发生这种情况(所以我不认为py2exe存在问题)。

应用程序是使用QtDesigner设计的,并使用pyside-uic转换为python。我尝试使用图标作为文件和资源(qrc文件),两者似乎都不起作用。

任何帮助或指示都将不胜感激。

感谢。

5 个答案:

答案 0 :(得分:4)

只要您不尝试将Qt dll捆绑到library.zip或exe中,kochelmonster的解决方案就可以正常工作。如果将插件放在app目录的基础中,也不需要设置库路径。

我仍然希望捆绑其他所有内容,因此我排除了qt dll并手动添加它们。我的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图像以外的东西,你还需要添加正确的插件。

答案 1 :(得分:2)

我假设它适用于bmp,但不是png / jpg?如果是这样,图像格式插件可能无法正确加载。

我想在已安装的应用程序目录中设置一个qt.conf文件,并确保plugin-dll转到/ plugins / imageformats /会使事情更好。

答案 2 :(得分:2)

我遇到了同样的问题。经过一番调查,我找到了解决方案: (麦克有正确的想法)

cx_freeze不会复制包含PyQt图片阅读器的ico插件目录。 以下是步骤:

  1. setup.py中将PyQt4插件目录复制到您的发行版
  2. 在您的代码中写下如下内容:
  3. application_path = os.path.split(os.path.abspath(sys.argv[0]))[0]
    try:
       if sys.frozen:
            plugin_path = os.path.join(application_path, "qtplugins")
            app.addLibraryPath(plugin_path)
    except AttributeError:
        pass
    

答案 3 :(得分:1)

它可能与Windows 7的任务栏图标处理有关吗?

请参阅How to set application's taskbar icon in Windows 7以获得答案。

答案 4 :(得分:0)

您必须在发布文件夹中手动添加“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
                  ...},
      ...)