Comment compiler les fichiers d'interface utilisateur (.ui) et de ressources (.qrc) de QtDesigner avec QGIS 3 sur Windows?

8

J'ai essayé de transposer le processus QGIS 2 sans succès.

J'ai d'abord dû éditer C: \ Program Files \ QGIS 2.99 \ etc \ ini \ python-core.bat qui contient des références à Python27 au lieu de Python36.

J'exécute C: \ Program Files \ QGIS 2.99 \ bin \ o4w_env.bat pour configurer correctement l'environnement python QGIS, mais ensuite, lorsque je lance:

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

Je reçois cette erreur:

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.

De même, lorsque je lance:

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

Je reçois cette erreur:

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
la source

Réponses:

11

Vous devez définir des environnements PyQT5. Ce sont mes scripts pour compiler les plugins QGIS 3 et avoir 3 chauves-souris complémentaires.

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

Vous avez seulement besoin changement set OSGEO4W_ROOT=D:\OSGeo4W64pour set OSGEO4W_ROOT="C:\Program Files\QGIS 2.99", ou quelque chose comme ça,

Essayez d'utiliser ce .bat

Remarque: cette batte est dans le même dossier que le plugin

Note 2: Pour l'importation importation resources_rc a besoin de cette astuce

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

ce chemin change probablement dans d'autres plugins. pyuic5

@sigeal soluton pour la note 2:

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

J'espère que ça aide

Fran Raga
la source
1
Excellente réponse, c'est exactement ce que je cherchais. Merci.
sigeal
Une question cependant: "importer resources_rc" à la fin du fichier généré me donne une erreur "Aucun module nommé 'resources_rc'". Je peux me débarrasser de cette erreur avec "from. Import resources_rc" mais ce n'est pas une solution correcte car le fichier est généré ... Est-ce que je manque quelque chose?
sigeal
1
Ok, vous devez ajouter ceci call pyuic5 --import-from <package-name>.gui.generated. Besoin de mettre le chemin de votre fichier de ressources et de recompiler.
Fran Raga
1
J'ai terminé avec cette commande call pyuic5 dockwidget_base.ui --from-imports -o dockwidget_base.py. Cela fonctionne parfaitement.
sigeal
1
Mettez à jour ma réponse avec votre solution
Fran Raga
2

Après avoir tout découvert sur les variables d'environnement et savoir ce que je cherchais, j'ai trouvé le fichier /osgeo4w_root/bin/python-qgis-dev.bat

Lorsqu'il est appelé depuis le shell osgeo4w actif, il définit tous les env. variables en appelant les fichiers .bat correspondants (comme suggéré par Francisco)!

Hannes Kohlmann
la source