PyQt / PySide - отображение значков - PullRequest
9 голосов
/ 01 января 2011

У меня есть приложение PySide, у которого есть значок для MainWindow (экземпляр QMainWindow).Когда я запускаю файл нормально, значок виден и все нормально, но когда я создаю exe с py2exe, значок не появляется.Это также происходит с cx_freeze (поэтому я не думаю, что проблема с py2exe).

Приложение было разработано с использованием QtDesigner и преобразовано в python с pyside-uic.Я пробовал использовать иконки как файл и как ресурс (файл qrc), и оба, похоже, не работают.

Любая помощь или указатели были бы признательны.

Ответы [ 5 ]

4 голосов
/ 13 апреля 2011

Решение kochelmonster работает до тех пор, пока вы не попытаетесь связать библиотеки Qt в library.zip или exe.Вам также не нужно устанавливать путь к библиотеке, если вы помещаете плагины в базу каталога приложения.

Я все еще хотел связать все остальное, поэтому я исключил библиотеки dt и добавил их вручную.Мой 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, вам придется их исключить и добавить вручную.Если вам нужно загрузить что-то кроме образа .ico, вам также нужно добавить правильный плагин.

2 голосов
/ 12 марта 2011

У меня была такая же проблема. После некоторого расследования я нашел решение: (Macke была правильная идея)

cx_freeze не копирует каталог плагинов PyQt, который содержит программу чтения изображений ico. Вот шаги:

  1. in setup.py скопируйте каталог плагинов PyQt4 в ваш дистрибутив
  2. В вашем коде напишите что-то вроде:
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
2 голосов
/ 07 января 2011

Я предполагаю, что это работает с BMP, но не PNG / JPG?Если так, вероятно, плагины формата изображения загружаются неправильно.

Я предполагаю, что установим файл qt.conf в каталог установленного приложения и убедимся, что plugin-dll перейдет в / plugins / imageformats /, чтобы все заработало.

1 голос
/ 18 января 2011

Может ли это быть связано с обработкой значков на панели задач Windows 7?

См. Как установить значок панели задач приложения в Windows 7 для ответа на этот вопрос.

0 голосов
/ 03 августа 2013

Вы должны включить «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
                  ...},
      ...)
...