python-3.x pyqt pyqt4 cx-freeze

python 3.x - Las imágenes no se muestran cuando se ejecuta una aplicación pyqt congelada en otra computadora



python-3.x pyqt4 (3)

Este es un problema desagradable en el que me he encontrado en el pasado. Permítanme citar http://www.py2exe.org/index.cgi/Py2exeAndPyQt : (Sé que está usando cx_freeze, pero estoy seguro de que puede adaptar su script)

PyQt4 y carga de imágenes (JPG, GIF, etc.)

PyQt4 usa complementos para leer esos formatos de imagen, por lo que deberá copiar la carpeta PyQt4 / plugins / imageformats a appdir / imageformats. Al igual que en los casos anteriores, puede usar data_files para esto. Esto no funcionará con bundle_files en.

Si los complementos no son alcanzables, QPixmap.load / loadFromData devolverá False cuando cargue una imagen en esos formatos.

testapp.py:

from PyQt4 import QtGui, QtSvg import sys app = QtGui.QApplication([]) wnd = QtSvg.QSvgWidget() wnd.load("flower.svg") wnd.show() sys.exit(app.exec_())

setup.py:

from cx_Freeze import setup, Executable files = [''flower.svg''] includes = [''sip'', ''PyQt4.QtCore''] setup( name = ''Example'', version = ''1.337'', description = ''Allows user to see what I did there.'', author = ''something'', options = {''build_exe'': {''include_files'':files, ''includes'':includes}}, executables = [Executable(''testapp.py'')])

Creé esta aplicación de prueba en una máquina con Windows 7 y la copié a una máquina con Windows XP. No tuve que copiar ningún dll, funcionó así.

Tengo un programa PyQt4 que congelé usando cx_freeze. El problema que estoy teniendo es que cuando hago un QGraphicsPixmapItem, que está obteniendo su ''mapa de píxeles hecho de un archivo SVG, el ítem no crea ningún problema, pero el Pixmap no se carga, así que no hay imagen solo el elemento en la escena . Lo que me confunde es que esto solo sucede cuando lo estoy ejecutando en una computadora diferente a la que creó el exe. Cuando ejecuto el exe en la computadora que lo construyó, el programa funciona perfectamente. Incluso cuando trato de ejecutarlo en una computadora con todos los componentes python y componentes pyqt necesarios instalados en la computadora, si no es la computadora la que lo creó, la pixmap no se carga desde el archivo svg. No estoy seguro de si esto es un problema con mi archivo cx_freeze setup.py o si necesito cambiar algo en el código principal para que cualquier ayuda o simplemente señalarme en la dirección correcta sea excelente. Mi sensación es que algo se está arruinando cuando cx_freeze lo está creando, así que pegaré el contenido de mi archivo setup.py a continuación. También estoy corriendo en Windows usando Python v3.1.

from cx_Freeze import setup, Executable files = [''drawings//FULL'', ''drawings//PANEL'', ''data.csv'', ''panelData.csv''] binIncludes = [''C://Python31//Lib//site-packages//PyQt4//bin//QtSvg4.dll''] includes = [''main'', ''PunchDialog'', ''ArrayDialog'', ''PricingDialog'', ''FontAndInputDialog'', ''PanelSelector'', ''PyQt4'', ''os'', ''sys'', ''ctypes'', ''csv''] packages = [''drawings''] path = [''C://Users//Brock//Documents//Programming//PanelDesigner//DrawingFirst'', ''C://Python31//Lib'', ''C://Python31//Lib//site-packages'', ''C://Python31//DLLs''] setup( name = ''PanelBuilder'', version = ''1.0'', description = ''Allows user to draw custom panel layouts.'', author = ''Brock Seabaugh'', options = {''build_exe'': {''packages'':packages, ''path'':path, ''include_files'':files, ''bin_includes'':binIncludes, ''includes'':includes}}, executables = [Executable(''PanelBuilder.py'')])

PD. Aquí está mi jerarquía de archivos (si eso ayuda):

/DrawingFirst Main .py file All .py files for all custom dialogs used /drawings some modules used /FULL A bunch of SVG files used /PANEL More SVG files used


Para las personas que vienen desde Google: si solo usas QtWebKit, necesitas copiar el directorio de formatos de imagen (que encuentras en PYTHONDIR / lib / site-packages / PyQt4 / plugins) en tu directorio de aplicación. Especificar PyQt4.QtWebKit entre las inclusiones no es suficiente.