Упаковщик / конструктор программы на PyQt5 c большим количеством изображений

Всем привет, пишу проект на PyQt5. Сейчас мне надо распространить его на другие ПК. Я использовал упаковщик pyinstaller, однако он не поддерживает загрузку изображений. Мой проект на данный момент содержит около 30 изображений. Это как значки кнопок, так и графические подсказки для пользователя в формате jpg. Посоветуйте пожалуйста упаковщик, которым можно создать исполняемый файл без потери изображений.

Работаю на Python 3.6, Среда разработки PyCharm.


Ответы (1 шт):

Автор решения: Felix

Попробуйте использовать модуль base64 для преобразования изображения в байтовые данные:

# -*- coding: utf-8 -*-
import base64

def pic2str(file, functionName):
  pic = open(file, 'rb')
  content = '{} = {}\n'.format(functionName, base64.b64encode(pic.read()))
  pic.close()

with open('pic2str.py', 'a') as f:
    f.write(content)


if __name__ == '__main__':
pic2str('test.png', 'explode')

Эта функция создаст новый файл .py с именем pic2str.py.

Затем импортируйте этот файл:

# -*- coding: utf-8 -*-
import sys
import base64
from io import BytesIO
from PyQt5 import QtWidgets
from PyQt5.QtGui import *
from test import Ui_MainWindow
from PIL import Image, ImageQt
from pic2str import explode

class MainWindow(QtWidgets.QMainWindow):
  def __init__(self):
      super(MainWindow, self).__init__()
      self.ui = Ui_MainWindow()
      self.ui.setupUi(self)

      # Load byte data
      byte_data = base64.b64decode(explode)
      image_data = BytesIO(byte_data)
      image = Image.open(image_data)

      # PIL to QPixmap
      qImage = ImageQt.ImageQt(image)
      image = QPixmap.fromImage(qImage)

      # QPixmap to QLabel
      self.ui.label.setPixmap(image)
      self.ui.label.setScaledContents(True)

if __name__ == '__main__':
  app = QtWidgets.QApplication([])
  window = MainWindow()
  window.show()
  sys.exit(app.exec_())
→ Ссылка