Вопрос

В программе 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"],
     )
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top