Изображения SVG не появляются после компиляции кода Python PyQt4 с помощью py2exe

Я написал приложение на Python, используя изображения svg в качестве значков.

QtGui.QIcon(':icons/icon.svg')  <- just like this

он работает на моем компьютере, но после его компиляции с помощью py2exe и запуска на другом компьютере значков нет. если я попытаюсь, например. формат bmp, все работает. поэтому я думаю, что это может быть какая-то проблема с библиотекой. Я не знаю, что PyQt4 использует для графики SVG.

в файле setup.py я написал

dllList = ('mfc90.dll','msvcp90.dll','qtnetwork.pyd','qtxmlpatterns4.dll', 'qsvg4.dll', 'qsvgd4.dll')
origIsSystemDLL = py2exe.build_exe.isSystemDLL
def isSystemDLL(pathname):
    if os.path.basename(pathname).lower() in dllList:
        return 0
    return origIsSystemDLL(pathname)
py2exe.build_exe.isSystemDLL = isSystemDLL

setup(windows=[{"script" : "myApp.py"}], options={"py2exe" : {"includes" : ["sip", "PyQt4.QtNetwork", "PyQt4.QtWebKit", "PyQt4.QtSvg" ]}})

а также иметь папку imageformats (с qvg4.dll и т. д.), включенную в каталог myApp.exe

так как решить эту проблему?

спасибо, Ярек


person jarek    schedule 08.08.2010    source источник


Ответы (3)


Используемый плагин (Qt 4.6):

  • plugins/
    • iconengines/
      • qsvgicon4.dll

Вам все еще нужен qt.conf, как объяснил Иво.

person oxullo    schedule 28.09.2010
comment
Если вы хотите отказаться от папки плагинов (поместите iconengines в папку приложения верхнего уровня), вам не нужен файл qt.conf. - person Compholio; 21.04.2017

Вы должны добавить qt.conf в основной каталог установки вашего приложения (на самом деле, рабочий каталог приложения), содержащий:

[Paths]
Plugins = <directory containing the image plugins directory>

Таким образом, макет каталога:

  • app.exe
  • qt.conf
  • plugins/
    • imageformats/
      • qsvg4.dll

И тогда в этом случае каталог в qt.conf - это plugins.

person Ivo    schedule 12.08.2010

Плагин qsvg требует QtXml. Добавьте "PyQt4.QtXml" в свои включения.

Также см. зависимости библиотек в Qt.

person makes    schedule 13.02.2012