Como compilar arquivos de interface do usuário do QtDesigner (.ui) e de recursos (.qrc) com o QGIS 3 no Windows?

8

Tentei transpor o processo QGIS 2 sem sucesso.

Primeiro tive que editar C: \ Arquivos de programas \ QGIS 2.99 \ etc \ ini \ python-core.bat, que contém referências ao Python27 em vez do Python36.

Executo C: \ Arquivos de Programas \ QGIS 2.99 \ bin \ o4w_env.bat para configurar corretamente o ambiente python do QGIS, mas quando inicio:

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

Eu recebo este erro:

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.

Da mesma forma, quando eu lanço:

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

Eu recebo este erro:

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
fonte

Respostas:

11

Você precisa definir ambientes PyQT5. Este é o meu script para compilar QGIS 3 Plugins e ter 3 bastões complementares.

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

Você só precisa de mudança set OSGEO4W_ROOT=D:\OSGeo4W64para set OSGEO4W_ROOT="C:\Program Files\QGIS 2.99", ou algo parecido,

Tente usar este .bat

Nota: este morcego está na mesma pasta que o plugin

Nota 2: Para importar, importar resources_rc precisa deste truque

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

esse caminho provavelmente muda em outro plugin. pyuic5

@sigeal soluton para a Nota 2:

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

Espero que ajude

Fran Raga
fonte
1
Ótima resposta, era exatamente isso que eu estava procurando. Obrigado.
Sigeal #
Porém, uma pergunta: "importar resources_rc" no final do arquivo gerado gera um erro "Nenhum módulo chamado 'resources_rc'". Eu posso me livrar desse erro com "from. Import resources_rc", mas essa não é a solução correta, pois o arquivo é gerado ... Sinto falta de algo?
Sigeal #
1
Ok, você precisa adicionar isso call pyuic5 --import-from <package-name>.gui.generated. Precisa colocar o caminho para o seu arquivo de recursos e compilar novamente.
Fran Raga
1
Eu terminei com este comando call pyuic5 dockwidget_base.ui --from-imports -o dockwidget_base.py. Funciona perfeitamente.
Sigeal #
1
Atualize minha resposta com sua solução
Fran Raga 6/17
2

Depois de descobrir tudo sobre as variáveis ​​de ambiente e saber o que estava procurando, encontrei o arquivo /osgeo4w_root/bin/python-qgis-dev.bat

Quando chamado a partir do shell osgeo4w ativo, ele define todo o ambiente. chamando os arquivos .bat correspondentes (como sugerido por Francisco)!

Hannes Kohlmann
fonte