2012-05-07 21 views
5

Estoy tratando de obtener QImage (o cualquier cosa en PyQt4, para el caso) para cargar un archivo jpg en un script. No he podido encontrar ninguna información sobre cómo hacer para cargar una imagen jpg como script, mucho para compilar usando py2exe, pero ni siquiera puedo llegar tan lejos.PyQt4 jpeg/jpg formato de imagen no compatible

Pasar algún tiempo para resolver esto, he seguido algunas cosas sin resultado ... Buscando en mis site-packages/PyQt4/plugins/imageformats carpeta que tengo:

qgif4.dll, qico4 .dll, qjpeg4.dll, qmng4.dll, qsvg4.dll, qtga4.dll, qtiff4.dll

Según QtGui.QImageReader.supportedImageFormats(), esto es lo que mi instalación de PyQt4 puede utilizar

[ PyQt4.QtCore.QByteArray ('bmp'), PyQt4.QtCore.QByteArray ('pbm'), PyQt4.QtCore.QByteArray ('pgm'), PyQt4.QtCore.QByteArray ('png'), PyQt4.QtCore.QByteArray ('pag pm '), PyQt4.QtCore.QByteArray (' xbm '), PyQt4.QtCore.QByteArray (' xpm ')]

También me he asegurado de que mi archivo qt.conf esté en el directorio principal de python y tiene esta

[Paths]

Prefix = C:/Python27/Lib/site-packages/PyQt4 
Binaries = C:/Python27/Lib/site-packages/PyQt4 

he intentado añadir

Plugins = C:/Python27/Lib/site-packages/PyQt4/plugins/imageformats 
Plugins = C:/Python27/Lib/site-packages/PyQt4/plugins 

sin suerte

estoy ejecutando python 2.7.2, con PyQt4 4.9.1 (ambos 32b), en un Windows 7 64b Home Premium.

También probé la versión 4.8.1 y 4.8.5 (que tenía a mano) pero ninguna de ellas admite jpg tampoco. Estoy perdido ¿Cómo puedo hacer que estos vuelvan a ser compatibles?

+0

Extraño. Para mí, esto había sido una preocupación una vez en OSX cuando se trataba de empaquetar con py2app, pero nunca en una situación de guión. Siempre logró encontrar el complemento correctamente. – jdi

+0

Guau, no es solo 'JPEG' Parece que PyQt no puede cargar ninguno de esos archivos' dll'. ¿Puedes probar 'Plugins = plugins'? No debería ser un camino completo. – Avaris

+0

He intentado con los complementos y luego he intentado con '/ plugins', '/ plugins/imageformats', 'plugins/imageformats' para más información. nada. – ooklah

Respuesta

6

Existen dos problemas diferentes que pueden contribuir a causar esto. Y parece que me encontré con ambos.

1st. Le di ejecutar el instalador de PyQt4 como "administrador", que parece haber resuelto parte del problema. Por lo tanto, debe ejecutarse como administrador para que todo funcione correctamente.

2do. Para que todos los complementos se carguen correctamente, la QApplication se debe hacer primero antes de cargar cualquier tipo de imagen.

por lo

app = QtGui.QApplication(sys.argv) 

se debe crear en primer lugar.

Mis secuencias de comandos se ejecutan como

def main(): 
    app = QtGui.QApplication(sys.argv) 
    win = window() 
    win.display() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

que no ha cambiado desde que he instalado PyQt4 como administrador, pero ahora funciona y carga archivos JPEG y todo lo demás.

Lo que estaba tratando de hacer, era crear un script que fuera llamado por una aplicación PyQt4 pero que no se ejecutaría solo, por lo que no era necesario crear una QApplcation primero.Que es donde me encontré con la edición # 2

Como referencia: http://article.gmane.org/gmane.comp.python.pyqt-pykde/7176/match=jpeg+plugin+not+loading

de instalar como administrador y siempre crean la QApplication, incluso si usted no lo necesita.

también si usted está mirando para ver lo que está disponible en reposo:

from PyQt4 import QtGui 
QtGui.QImageReader.supportedImageFormats() 

no mostrará todo, todavía tienen que correr

from PyQt4 import QtGui 
import sys 
app = QtGui.QApplication(sys.argv) 
QtGui.QImageReader.supportedImageFormats() 

Esto era molesto para rastrear, por lo que es de esperar esto será útil para otros.

+1

Así que, acabo de encontrar esto con virtualenvs en Windows (copié PyQt4 de paquetes de sitio globales a envs site-packages) - Tuve que crear el qt.conf como se especificaba en el original publicar al lado de Scripts \ python.exe - ¡entonces todo funcionó como debería! – Strayer

+0

Si alguien sabe cómo cargar los complementos sin crear una QApplication, por favor agregue un comentario aquí; Sería muy útil para aquellos de nosotros que simplemente usamos QImage como una clase de utilidad de carga de imágenes. – GaryO

+0

El mío no funcionaría hasta que ponga la llamada QApplication en __main__. No funcionó con QApplication en main() como lo mostró. Muy extraño, pero eliminando el uso de main() lo solucionó. – panofish

0

Por si alguien está buscando cargar complementos, tengo created an answer for a more proper question here para permitirle básicamente poner complementos en cualquier carpeta compartida de red.

En resumen, use QtCore.QCoreApplication.addLibraryPath() en lugar del archivo qt.conf.

Cuestiones relacionadas