PyInstaller не загрузит изображения PyQt в GUI

У меня были некоторые сложности, чтобы передать мой скрипт в исполняемый файл, но мне, наконец, удалось. Основная проблема заключается в том, что PyInstaller не загружает изображения в графический интерфейс.

Вот как это должно выглядеть:

Как это должно выглядеть

Вот как это выглядит:

Как это выглядит

И я не могу найти проблему, это файл .spec:

a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'programa.py'], pathex=['img', 'C:\\Users\\Poblet\\ManGet\\HeyMang\\pyinstaller']) pyz = PYZ(a.pure) exe = EXE(pyz, a.scripts, exclude_binaries=1, name=os.path.join('build\\pyi.win32\\Hey Mang!', 'Hey Mang!.exe'), debug=False, icon='heymang.ico', strip=False, upx=True, console=False ) coll = COLLECT( exe, Tree('C:\\Users\\Poblet\\ManGet\\HeyMang\\pyinstaller\\img'), a.binaries, a.zipfiles, a.datas, strip=False, upx=True, name=os.path.join('dist', 'Hey Mang!')) app = BUNDLE(coll, name=os.path.join('dist', 'Hey Mang!.app')) 

И он предполагает захватить эти образы, как это сказано здесь:

 Warnings written to C:\Users\Poblet\ManGet\HeyMang\pyinstaller\Hey Mang!\warnHey Mang!.txt checking PYZ rebuilding outPYZ1.toc because outPYZ1.pyz is missing building PYZ outPYZ1.toc checking PKG rebuilding outPKG3.toc because outPKG3.pkg is missing building PKG outPKG3.pkg checking EXE rebuilding outEXE2.toc because Hey Mang!.exe missing building EXE from outEXE2.toc I: SRCPATH [('heymang.ico', None)] I: Updating icons from ['heymang.ico'] to c:\users\poblet\appdata\local\temp\tmpr34zmp I: Writing RT_GROUP_ICON 0 resource with 76 bytes I: Writing RT_ICON 1 resource with 1128 bytes I: Writing RT_ICON 2 resource with 4264 bytes I: Writing RT_ICON 3 resource with 9640 bytes I: Writing RT_ICON 4 resource with 16936 bytes I: Writing RT_ICON 5 resource with 67624 bytes 

И они находятся в папке, но они не будут работать по той или иной причине.

Весь исходный код (минус файлы PyInstaller) находится здесь .

Я ценю вашу помощь.

3 Solutions collect form web for “PyInstaller не загрузит изображения PyQt в GUI”

Я смог решить это, и это тоже должно помочь другим:

  • Создайте файл .spec со следующей командой:
 python Makespec.py --noconsole --icon="youricon.ico" --name="App name" program.py 
  • Откройте файл .spec (например: App name / App name.spec), и вы увидите что-то вроде этого:
 a = Analysis([os.path.join(HOMEPATH,'support\\_mountzlib.py'), os.path.join(HOMEPATH,'support\\useUnicode.py'), 'program.py'], pathex=['C:\\Your\\User\\Path\\To\\pyinstaller']) pyz = PYZ(a.pure) exe = EXE(pyz, a.scripts, exclude_binaries=1, name=os.path.join('build\\pyi.win32\\App Name', 'App Name.exe'), debug=False, strip=False, upx=True, console=False , icon='youricon.ico') coll = COLLECT( exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, name=os.path.join('dist', 'Hey Mang!')) app = BUNDLE(coll, name=os.path.join('dist', 'Hey Mang!.app')) 

И перед a.binaries вы должны добавить этот фрагмент кода:

  Tree('C:\\Your\\App\\Path\\To\\Images'), 

Поэтому, когда PyInstaller читает файл .spec, компилятор передает изображение в каталог dist .

  • Теперь нам нужно создать файл .qrc , который будет загружать наши изображения. И этот файл должен выглядеть примерно так:
 <RCC> <qresource prefix="/" > <file>img/image1.png</file> <file>img/image2.png</file> <file>img/image3.png</file> </qresource> </RCC> 

С вашими изображениями, очевидно. И это нужно скомпилировать в формате .py со следующей командой:

 pyrcc4 -o images.qrc images_qr.py 
  • И, наконец, нам нужно добавить это в наш скрипт, например:
 import images_qr # ... Some code here and there ... self.setWindowIcon(QtGui.QIcon(':/img/image1.png')) # The colon is important, it must be there 

И как только вы скомпилируете, вы должны увидеть изображения просто так:

Теперь он работает

Надеюсь, это поможет всем с той же проблемой. Не забудьте указать правильные пути изображения и добавить двоеточие в ваши изображения.

Приветствую.

Быстрое обновление метода ниже. Во-первых – это отличный способ легко включать изображения в приложение PyQt / Pyside. Для Pyside просто используйте pyside-rcc.exe, а не pyrcc4.

Во-вторых, я не уверен, что команда Tree(...) даже необходима. После создания папки dist с помощью этого метода я удалил все файлы изображений, которые были скопированы с помощью команды « Tree.. . Мой исполняемый файл все еще работает, и изображения отображаются правильно. Возможно, нам просто нужно создать файл qrc и запустить программу pyrcc, убедившись, что модули python обновляются с префиксом двоеточия в пути к файлам iamge.

Если вы используете Qt Designer, вы можете добавлять значки и изображения без особых трудностей. Следуйте инструкциям здесь http://doc.qt.io/qt-4.8/designer-resources.html

Протестировано на PySide 1.2.2 с Qt Designer 4.8.5 и Pyinstaller 2.1

  • Как добавить пространство между двумя виджетами, размещенными в сетке в tkinter ~ python?
  • Почему время python имеет 61 секунду
  • Как установить PyCrypto в Windows?
  • Как просмотреть строки после использования .groupby () в Pandas df / series
  • Python Flask Email KeyError KeyError: 'mail'
  • Python: поиск самого длинного / кратчайшего предложения в случайном абзаце?
  • Получить общее количество столбцов Pandas
  • Как преобразовать файл из gml в edgelist в python?
  • Python - лучший язык программирования в мире.