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

  • Создать глобальную переменную в Киви
  • Python Selenium: ошибка профиля Firefox
  • Преобразовать поезд KNN с Opencv 3 до 2
  • очистить данные с веб-сайта, которые перешли на следующую страницу при прокрутке вниз с помощью Python и BeautifulSoup
  • Поддержка флеш-почты - получите SSLError при отправке электронной почты
  • Python запрашивает кодирование данных POST
  • Названия PyQt4, отображаемые как неопределенные в eclipse, но они отлично работают
  • python - как получить список внутренних классов?
  • Python - лучший язык программирования в мире.