Поддержка PyQT JPEG не работает в комплекте - PullRequest
0 голосов
/ 05 февраля 2010

Чтобы включить поддержку jpeg в приложении PyQT, необходимо вручную включить qjpeg4.dll.
Это прекрасно работает, когда DLL-файл и PID-файл не объединены в окончательном EXE. Например с py2exe вы можете сделать следующее:

DATA=[('imageformats',['C:\\Python26/Lib/site-packages/PyQt4/plugins/imageformats/qjpeg4.dll'])]
setup(console=[{"script":"cycotic.py"}], 
    data_files = DATA,
    options={"py2exe":{
        "includes":["sip"],
        "excludes":MODULE_EXCLUDES,
        "bundle_files":3,
        "compressed":False,
        "xref":True}}, 
    zipfile=None)

Однако, если вы делаете то же самое, и вы связываете dll в exe-файле (используя "bundle_files":1), произойдет сбой со следующим сообщением:

QObject::moveToThread: Current thread (0x3a16608) is not the object's thread (0x
2dddaf8).
Cannot move to target thread (0x2dddaf8)

QObject::moveToThread: Current thread (0x3a16608) is not the object's thread (0x
2dddaf8).
Cannot move to target thread (0x2dddaf8)

QObject::moveToThread: Current thread (0x3a16608) is not the object's thread (0x
2dddaf8).
Cannot move to target thread (0x2dddaf8)

QPainter::begin: Paint device returned engine == 0, type: 3
QPainter::end: Painter not active, aborted
QPixmap::scaled: Pixmap is a null pixmap

Как правильно связать приложение?

Ответы [ 2 ]

2 голосов
/ 24 мая 2012

У меня та же проблема, как я знаю, py2exe дал подсказку: http://www.py2exe.org/index.cgi/Py2exeAndPyQt

Это гласит: ...... поэтому вам нужно скопировать папку PyQt4 \ plugins \ imageformats в \ imageformats. ....... Это не будет работать с bundle_files на . ... * Это будет работать и с bundle_files, но вам нужно исключить библиотеки Qt из комплекта (используя опцию dll_exclude) и добавить их в каталог с исполняемым файлом через какой-то другой механизм (например, data_files). *

ниже приведены мои настройки, например:

    zipfile=None,
    options = { "py2exe" :{
                           "compressed":1,
                           "includes": my_includes,                           
                           "packages": my_packages,
                           "optimize":2,
                           "bundle_files":1,
                           "dll_excludes":["QtCore4.dll","QtGui4.dll","QtNetwork4.dll"]
                           }}

Итак, папка dist состоит из этих файлов (в моем случае):

  • imageformats (папка, включает dt плагина qt для работы с изображениями)
  • QtCore4.dll
  • QtGui4.dll
  • QtNetwork4.dll
  • MyExeFile.exe
  • w9xpopen.exe

вот и все

0 голосов
/ 08 февраля 2010

Попробуйте добавить pyqt4 в качестве пакета, чтобы заставить py2exe включить все из PyQT в вашу сборку, например:

options={"py2exe":{
        "includes":["sip"],
        "excludes":MODULE_EXCLUDES,
        "packages":["PyQt4"],
        "bundle_files":1,
        "compressed":False,
        "xref":True}}
...