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.

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


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)!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.