¿Cómo compilar la interfaz de usuario QtDesigner (.ui) y los archivos de recursos (.qrc) con QGIS 3 en Windows?

8

Traté de transponer el proceso QGIS 2 sin éxito.

Primero tuve que editar C: \ Archivos de programa \ QGIS 2.99 \ etc \ ini \ python-core.bat que contiene referencias a Python27 en lugar de Python36.

Ejecuto C: \ Archivos de programa \ QGIS 2.99 \ bin \ o4w_env.bat para configurar correctamente el entorno QGIS python, pero luego, cuando inicio:

"C:\Program Files\QGIS 2.99\apps\Python36\Scripts\pyuic5.bat" -o dockwidget_base.py dockwidget_base.ui

Me sale este error:

Traceback (most recent call last):
  File "C:\PROGRA~1\QGIS2~1.99\apps\Python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\PROGRA~1\QGIS2~1.99\apps\Python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\PROGRA~1\QGIS2~1.99\apps\Python36\lib\site-packages\PyQt5\uic\pyuic.py", line 26, in <module>
    from PyQt5 import QtCore
ImportError: DLL load failed: Specified module could not be found.

Del mismo modo, cuando inicio:

"C:\Program Files\QGIS 2.99\apps\Python36\Scripts\pyrcc5.bat" -o resources_rc.py resources.qrc

Me sale este error:

Traceback (most recent call last):
  File "C:\PROGRA~1\QGIS2~1.99\apps\Python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\PROGRA~1\QGIS2~1.99\apps\Python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\PROGRA~1\QGIS2~1.99\apps\Python36\lib\site-packages\PyQt5\pyrcc_main.py", line 21, in <module>
    from PyQt5.QtCore import PYQT_VERSION_STR, QDir, QFile
ImportError: DLL load failed: Specified module could not be found.
sigeal
fuente

Respuestas:

11

Necesita configurar entornos PyQT5. Estos son mis scripts para compilar QGIS 3 Plugins y tienen 3 murciélagos complementarios.

compile_ui.bat

@ECHO OFF

set OSGEO4W_ROOT=D:\OSGeo4W64

set PATH=%OSGEO4W_ROOT%\bin;%PATH%
set PATH=%PATH%;%OSGEO4W_ROOT%\apps\qgis\bin

@echo off
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
call "%OSGEO4W_ROOT%\bin\qt5_env.bat"
call "%OSGEO4W_ROOT%\bin\py3_env.bat"
@echo off
path %OSGEO4W_ROOT%\apps\qgis-dev\bin;%OSGEO4W_ROOT%\apps\grass\grass-7.2.2\lib;%OSGEO4W_ROOT%\apps\grass\grass-7.2.2\bin;%PATH%

cd /d %~dp0

@ECHO ON
::Ui Compilation
call pyuic5 dialog.ui -o gui\generated\ui_dialog.py          

::Resources
call pyrcc5 ui\resources.qrc -o gui\generated\resources_rc.py

@ECHO OFF
GOTO END

:ERROR
   echo "Failed!"
   set ERRORLEVEL=%ERRORLEVEL%
   pause

:END
@ECHO ON

Sólo es necesario el cambio set OSGEO4W_ROOT=D:\OSGeo4W64de set OSGEO4W_ROOT="C:\Program Files\QGIS 2.99", o algo por el estilo,

Intenta usar este .bat

Nota: este bate está en la misma carpeta que el complemento

Nota 2: para importar, importar recursos_rc necesita este truco

call pyuic5 --import-from <package-name>.gui.generated dialog.ui -o gui\generated\ui_dialog.py`

esta ruta probablemente cambie en otro complemento. pyuic5

Solución @sigeal para la Nota 2:

call pyuic5 dockwidget_base.ui --from-imports -o dockwidget_base.py

Espero que ayude

Fran Raga
fuente
1
Gran respuesta, eso es exactamente lo que estaba buscando. Gracias.
sigeal
Sin embargo, una pregunta: "importar recursos_rc" al final del archivo generado me da el error "No hay módulo llamado 'recursos_rc'". Puedo deshacerme de este error con "from. Import resources_rc" pero esta no es una solución correcta ya que el archivo se genera ... ¿Me pierdo algo?
sigeal
1
Ok, necesitas agregar esto call pyuic5 --import-from <package-name>.gui.generated. Necesita poner la ruta para su archivo de recursos y compilar nuevamente.
Fran Raga
1
Terminé con este comando call pyuic5 dockwidget_base.ui --from-imports -o dockwidget_base.py. Funciona perfectamente
sigeal
1
Actualice mi respuesta con su solución
Fran Raga
2

Después de haber descubierto todo sobre las variables de entorno y saber lo que estaba buscando, encontré el archivo /osgeo4w_root/bin/python-qgis-dev.bat

Cuando se llama desde el shell osgeo4w activo, establece todo el entorno. variables llamando a los archivos .bat correspondientes (como lo sugiere Francisco)!

Hannes Kohlmann
fuente