Вопрос
В программе PyQT4 у меня есть QLabel, отображающий изображение со следующим кодом:
в инициализирующем коде:
Image=QImage(som_path_from_a_fileDialog)
в методе изменения размера:
pixmap = QPixmap.fromImage(Image)
pixmap = pixmap.scaled(self.display.size())
self.display.setPixmap(pixmap)
Когда я выполняю свой сценарий с помощью Python, он работает нормально, и я могу отображать файлы .bmp и JPEG.Однако если я скомпилирую его с помощью py2exe, я смогу отображать только файлы .bmp.Отображение файла JPEG не удастся:
QPainter::begin: Paint device returned engine == 0, type: 3
QPainter::end: Painter not active, aborted
QPixmap::scaled: Pixmap is a null pixmap
РЕДАКТИРОВАТЬ :Это дубликат этот вопрос
Решение
Поддержка многих форматов изображений в последних версиях PyQt4 доступна через плагины.Эти плагины можно найти в вашем C:\PythonXY\Lib\site-packages\PyQt4\plugins\imageformats
каталог.Вам следует скопировать imageformats
каталог в каталог с вашим exe.Обратите внимание, что вам необходимо иметь imageformats
каталог прямо рядом с вашим pyapp.exe.Или вам следует поместить в тот же каталог, где находится ваш pyapp.exe, специальный qt.conf, где вы можете указать путь к плагинам изображений, например
[Paths]
Plugins = Library\plugins
Вот пример кода для копирования плагина sqlite (он не для изображений, но вы поймете идею), когда я собирал свой exe:
from distutils.core import setup
import py2exe
import os, sys
import PyQt4
setup(options = {"py2exe": {"includes": ["sip"]}},
data_files=[('sqldrivers', [os.path.join(os.path.dirname(PyQt4.__file__),
'plugins',
'sqldrivers',
'qsqlite4.dll')])],
windows = ["myapp.py"],
)