Pregunta

Estoy tratando de utilizar una imagen JPEG en un objeto QImage de un script en Python, con PyQt4.

El script en sí funciona perfectamente, la imagen se carga y puede ser manipulado y rendido y todo. Sin embargo, cuando trato de "compilar" este script con py2exe, todo funciona, pero la imagen JPEG. Sustituyéndolo por una fábrica de equivalentes PNG, pero ya que las imágenes de mis descargas de programas desde la web, no van a estar siempre en formato PNG y no me puedo permitir convertir a todos con otra biblioteca.

He descubierto que el apoyo de la imagen JPEG para QImage, junto con otros formatos de imagen, es proporcionada por algunos archivos DLL en el directorio \ qt \ plugins \ imageformats (que se llaman qjpeg4.dll y qjpeg4d.dll). Yo creo que tenga que utilizar alguna manera en mi ejecutable, pero no sé cómo. He intentado simplemente copiarlos en mi directorio exe, sin suerte. He intentado, como se indica aquí , para incluir esos archivos como data_files en el script setup.py, pero sin suerte (que parece que lo único que hace es copiar estos archivos en el directorio del exe, por lo que no cambia nada de copiar manualmente de todos modos).

Estoy seguro de que hay un puñado de aplicaciones por ahí usando PyQt con imágenes JPEG, ¿cómo lo hacen? Parecía una tarea trivial, pero estoy atascado en ello ahora.

Además, quiero mi aplicación para ser multiplataforma (¿por qué si no iba a ser la codificación en Python?), Espero que no voy a tener tantos problemas de envasado (que no es el único) cuando se envasan para OS X o Linux. Will I?

¿Fue útil?

Solución

Después de horas de tumbos con el mismo tema, me gustaría compartir la solución que funcionó para mí en Windows Vista: usando python2.6

copiar el siguiente directorio en el directorio dist generada por py2exe:

C:\Python26\Lib\site-packages\PyQt4\plugins\imageformats

Me acaba de caer el directorio imageformats directamente en mi directorio dist, sin ningún tipo de modificaciones adicionales a qt.conf ni nada de eso. Yo no lo he probado, pero esto puede funcionar para fonones también.

Otros consejos

Tengo que confesar que nunca he conseguido la combinación py2exe + pyqt del todo bien (y, py2exe no ayuda en absoluto con el empaquetado multiplataforma). PyInstaller parece ser mucho mejor - la documentación en http://www.pyinstaller.org/ son viejos , pero el tronco sVN es mucho más reciente. Algunos documentos están en diapositivas dados en la reciente conferencia Pycon Italia Tre - http://www.pycon.it/static/stuff/slides/distribuire-programmi-python-con-pyinstaller.pdf - y las diapositivas están en Inglés, y contienen la corriente email del mantenedor, por lo que deben ayudar! (Y, vamos todos lobby El mantenedor actual para actualizar los documentos ... -!)

Etienne - Gracias por la punta ti. Después de mucha lectura y ensayo y error, llegué a la misma conclusión:. PIL utilizar para mostrar imágenes JPEG en una aplicación generada py2app-

http://www.thetoryparty.com/wp/2009/08/27/pyqt-and-py2app-seriously-i-dont-know-what- a-hacer-con-que-cuando-youre-como-este /

Lo que supongo es que las soluciones propuestas para py2exe / Windows no se aplican necesariamente a py2app / OSX.

Estoy en OSX Leopard. Supongamos que usted tiene una MyApp.app aplicación.

  • Poner el libqjpeg.dylib bibliotecas y libqgif.dylib en
    MyApp.app/Contents/plugins/imageformats/
  • Ponga esto en qt.conf en MyApp.app/Contents/resources/:

    [Paths]
    Prefix = .
    Binaries = .
    

En mi máquina (Leopard) esto funciona.

Después de probar todas las soluciones anteriores en vano, sólo terminaron usando PIL para cargar mis imágenes. Como quería convertir estas imágenes a una textura en un widget de Qt OpenGL, el resultado fue el mismo si me carga la imagen usando Qt o PIL. Aún así, estoy desconcertado que una cosa tan básica como archivos JPEG de carga es tan complicado en una biblioteca de interfaz gráfica de usuario, así conocido y ampliamente utilizado como Qt.

Yo tenía el mismo problema. Fijo que utiliza este: http://mail.python.org /pipermail/python-list/2008-June/669374.html

  1. plugins de copia de Qt en el directorio: $ YOUR_DIST_PATH / PyQt4 / plugins;
  2. Copiar qt.conf a su directorio dist;
  3. Editar qt.conf, cambiar de prefijo a ./PyQt4

Para mí, el problema se resolvió simplemente copiar el "qt.conf" para el directorio del ejecutable.

Puede encontrar el "qt.conf" en ... \ PythonXX \ Lib \ site-packages \ PyQt4 \ qt.conf.

Gracias por la ayuda.

Todo lo anterior no para mí hasta que me di cuenta de que yo era agrupación .exe (es decir, que tenía la opción "bundle_files":. 2 en mi setup.py lo cambié a bundle_files = 2, y ahora funciona muy bien.

Las soluciones anteriores están bien. En concreto, me acaba de agregar la línea siguiente en mi setup.py: de datos = [( "imageformats", glob.glob ( "C: \ Python26 \ Lib \ site-packages \ PyQt4 \ plugins \ imageformats * .dll"))]

(además de otros archivos, por supuesto).

A continuación, las DLL de imagen de carga son en MY_EXE_DIR / imageformats

no necesitaba un qt.conf para hacer este trabajo, aunque estoy seguro de que podría utilizarlo si desea mantener su árbol de directorios menos desordenada.

Es posible usar el plugin JPEG con un guión py2exe'd, incluso utilizando bundle_files. Es necesario disponer dos cosas para conseguir que esto funcione correctamente:

  1. Copiar PyQt4 / plugins / imageformats al directorio de salida de py2exe (por defecto: dist)

    Sólo tiene que copiar los formatos que realmente necesita.

  2. Cuando utilice la opción bundle_files que necesita para execlude los archivos DLL de la Qt archivo zip utilizando la opción de --dll-excludes pyexe.

    Usted todavía tiene que copiar los archivos DLL de Qt para el directorio de salida de alguna otra manera (por ejemplo, mediante el uso de la opción data_files).

En Windows, sugirieron soluciones funcionan a la perfección.

Sin embargo, en OSX no puede hacer que funcione incluso con las instrucciones aquí arriba.

pregunta es: los archivos libqjpeg.dylib y libqgif.dylib se encuentran en el directorio /Developer/Applications/Qt/plugins/imageformats/, y que si ha instalado Qt en sí mismo, no sólo PyQt. estos archivos no funcionan para mí.

en la distribución de PyQt, veo los archivos y libqjpeg.bundle libqgif.bundle en /opt/local/libexec/qt4-mac/plugins/imageformats/, sin embargo estas no son las bibliotecas, y por cierto no puedo abrir sus contenidos, ya sea, incluso si tienen la extensión .bundle. el uso de estos archivos en lugar no funciona bien.

Tengo curiosidad por saber qué has hecho para que funcione en OSX. he instalado PyQt siguiente esta guía .

Gracias por sus votos respuestas para la pregunta! Me he encontrado con el mismo problema como lo hizo, y no pude evitar soluciones. Con suerte, yo estaba usando VCS y encontré que mi versión antigua de aplicación cargado correctamente las imágenes JPEG y las nuevas versiones dejó de hacerlo. Cogí este error utilizando PySide v1.2.2 .

Para habilitar las bibliotecas de cargar, he utilizado la misma solución que hizo @Macke (añadida es decir y qt.conf editado).

Mi qt.conf fue el siguiente:

[Paths]
Binaries = .
Plugins = qtplugins

C:\Python27\Lib\site-packages\PySide\plugins directory fue copiado en qtplugins directorio, así que tuve siguientes directorios:

qtplugins\accessible
qtplugins\codecs
qtplugins\graphicssystems
qtplugins\iconengines
qtplugins\imageformats

tuve código siguiente:

class NotesCalendar(QtGui.QCalendarWidget):
    note_icon = QtGui.QImage("res/16note.png")

Moving variable de clase NotesCalendar.note_icon al constructor resuelto el problema y Qt empezó a cargar sus bibliotecas correctamente. Parece que el constructor variable de clase interrumpe algunas cosas PySide interno.

funciona sin problemas en Windows. Especificación de directorio qt.conf y plugins copia correcta es suficiente para habilitar el soporte JPEG en py2exe + PySide construcción. Por supuesto, debe tener ningún problema en su propio código.

Espero que esto ahorrará a alguien un día! ;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top