PyQt / PySide - visualización del icono
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.
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:
- en
setup.py
copiar el directorio de pluginsPyQt4
a su distribución - 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
Podría estar relacionado con el manejo icono de la barra de tareas de Windows 7?
Cómo icono de la barra de tareas de aplicación del grupo en Windows 7 una respuesta a eso.
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
...},
...)