2010-02-05 8 views
0

Pour activer le support jpeg dans une application PyQT, vous devez inclure manuellement le qjpeg4.dll.
Cela fonctionne très bien lorsque les fichiers dll et pyd ne sont pas regroupés dans l'exe final. Par exemple avec py2exe vous pouvez effectuer les opérations suivantes:Le support pyqt jpeg ne fonctionne pas sous forme groupée

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) 

Cependant, si vous faites la même chose, et vous regroupez le dll dans l'exe (en utilisant "bundle_files":1), il échoue avec le message suivant:

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 

Comment puis-je regrouper l'application correctement?

Répondre

0

Essayez d'ajouter pyqt4 comme un ensemble pour forcer py2exe à inclure tout de PyQT lors de la construction, comme ceci:

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

Modified pyqt -> PyQt4 pour avoir un nom de paquet valide, mais il a échoué. Apparemment, PyQt4 n'aime pas être inclus de cette façon. Il échoue avec: erreur: compilation 'C: \ Python26 \ lib \ site-packages \ PyQt4 \ uic \ port_v3 \ proxy_base.py' a échoué SyntaxError: non valide (proxy_base.py, ligne 4) – shodanex

+0

C'est bug dans proxy_base.py? ajoutez proxy_base à vos Excludes et voyez s'il construit –

2

J'ai le même problème, que je sache, py2exe a fourni l'indice: http://www.py2exe.org/index.cgi/Py2exeAndPyQt

Il se lit comme suit: ...... vous aurez donc besoin de copier le dossier PyQt4 \ plugins \ imageformats à \ imageformats. ... Cela ne fonctionnera pas avec bundle_files sur. ... * Cela fonctionnera également avec bundle_files, mais vous devez exclure les DLL Qt de bundle (en utilisant l'option dll_excludes) et les ajouter au répertoire avec l'exécutable via un autre mécanisme (tel que data_files). *

Voici mes options de configuration, comme celui-ci:

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"] 
          }} 

Ainsi, le dossier dist consiste ces fichiers (dans mon cas):

  • imageformats (dossier, inclure dll plugin qt pour traiter les images)
  • QtCore4.dll
  • QtGui4.dll
  • QtNetwork4.dll
  • MyExeFile.exe
  • w9xpopen.exe

qui est tout