Pregunta

I tiene una aplicación PySide que tiene un icono para el MainWindow (una instancia de QMainWindow). Cuando ejecuto el archivo, normalmente, el icono es visible y todo está bien, pero cuando se crea un archivo EXE con py2exe, no aparece el icono. Esto ocurre con cx_freeze también (por lo que no creo que el problema es con py2exe).

La aplicación fue diseñado usando QtDesigner y se convierte en pitón con pyside-uic. Probé ambos utilizando iconos como un archivo y como una presentación (archivo QRC) de recursos y ambos no parece funcionar.

Cualquier ayuda o punteros sería apreciada.

Gracias.

¿Fue útil?

Solución

La solución de kochelmonster funciona siempre y cuando no lo intentas y agrupar los archivos DLL en Qt library.zip o el exe. También no es necesario establecer una ruta de biblioteca si pones los plugins en el directorio de base de la aplicación.

Yo todavía quería hacer un paquete de todo lo demás por lo que excluía a los dlls qt y les añadí manualmente. Mi apariencia setup.py algo como esto:

from os.path import join

_PYSIDEDIR = r'C:\Python27\Lib\site-packages\PySide'
data_files =[('imageformats',[join(_PYSIDEDIR,'plugins\imageformats\qico4.dll')]),
              ('.',[join(_PYSIDEDIR,'shiboken-python2.7.dll'),
                join(_PYSIDEDIR,'QtCore4.dll'),
                join(_PYSIDEDIR,'QtGui4.dll')])
              ]
setup(
    data_files=data_files,
    options={
        "py2exe":{
            "dll_excludes":['shiboken-python2.7.dll','QtCore4.dll','QtGui4.dll'],
            "bundle_files": 2
            ...
        }
    }
    ...
)

Si su proyecto utiliza Qt adicional dlls tendrá que excluir y agregarlos manualmente también. Si necesita algo más carga una imagen .ico también tendrá que añadir el plugin correcto que.

Otros consejos

Estoy asumiendo que trabaja con un bmp, pero no un png / jpg? Si es así, es probable que los plugins de formato de imagen no se cargan correctamente.

supongo que la creación de un archivo de href="http://doc.trolltech.com/4.7/qt-conf.html" rel="nofollow"> qt.conf instalado en el directorio y asegurarse de plugin-DLL de aplicación van a / plugins / imageformats / hará que las cosas funcionen mejor.

Yo tenía el mismo problema. Después de algunas investigaciones he encontrado una solución: (Macke tenía la idea correcta)

cx_freeze no copia el directorio de plugins PyQt, que contiene el lector de imágenes ico. Estos son los pasos:

  1. en setup.py copiar el directorio de plugins PyQt4 a su distribución
  2. En el código de escribir algo como:
application_path = os.path.split(os.path.abspath(sys.argv[0]))[0]
try:
   if sys.frozen:
        plugin_path = os.path.join(application_path, "qtplugins")
        app.addLibraryPath(plugin_path)
except AttributeError:
    pass

Se debe incluir "qico4.dll" manualmente en la carpeta de la liberación. Inserte esto en su setup.py:

import sys
from os.path import join, dirname
from cx_Freeze import setup, Executable

_ICO_DLL = join(dirname(sys.executable), 
                     'Lib', 'site-packages',
                     'PySide', 'plugins',
                     'imageformats', 'qico4.dll')

build_exe = {
        'include_files': [(
                _ICO_DLL,
                join('imageformats', 'qico4.dll'))]}

setup(name = "xxxxx",
      version = "1.0.0",
      ...
      options = { ...
                 'build_exe': build_exe
                  ...},
      ...)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top