Wie kompiliere ich QtDesigner-Benutzeroberflächendateien (.ui) und Ressourcendateien (.qrc) mit QGIS 3 unter Windows?

8

Ich habe versucht, den QGIS 2-Prozess ohne Erfolg umzusetzen.

Ich musste zuerst C: \ Programme \ QGIS 2.99 \ etc \ ini \ python-core.bat bearbeiten, das Verweise auf Python27 anstelle von Python36 enthält.

Ich führe C: \ Programme \ QGIS 2.99 \ bin \ o4w_env.bat aus, um die QGIS-Python-Umgebung richtig zu konfigurieren, aber dann, wenn ich starte:

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

Ich erhalte diesen Fehler:

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.

Ebenso, wenn ich starte:

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

Ich erhalte diesen Fehler:

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.
Siegel
quelle

Antworten:

11

Sie müssen PyQT5-Umgebungen einstellen. Dies sind meine Skripte zum Kompilieren von QGIS 3 Plugins und haben 3 komplementäre Fledermäuse.

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

Sie brauchen nur Wechselgeld set OSGEO4W_ROOT=D:\OSGeo4W64für set OSGEO4W_ROOT="C:\Program Files\QGIS 2.99"oder so etwas,

Versuchen Sie es mit dieser .bat

Hinweis: Dieser Schläger befindet sich im selben Ordner wie das Plugin

Hinweis 2: Für den Import import resources_rc benötigen Sie diesen Trick

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

Dieser Pfad ändert sich wahrscheinlich in einem anderen Plugin. pyuic5

@sigeal Lösung für Anmerkung 2:

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

Ich hoffe, es hilft

Fran Raga
quelle
1
Tolle Antwort, genau das habe ich gesucht. Vielen Dank.
Siegel
Eine Frage: "import resources_rc" am Ende der generierten Datei gibt mir den Fehler "Kein Modul mit dem Namen 'resources_rc'". Ich kann diesen Fehler mit "from. Import resources_rc" beseitigen, aber dies ist keine korrekte Lösung, da die Datei generiert wird ... Vermisse ich etwas?
Siegel
1
Ok, du musst das hinzufügen call pyuic5 --import-from <package-name>.gui.generated. Geben Sie den Pfad für Ihre Ressourcendatei ein und kompilieren Sie ihn erneut.
Fran Raga
1
Ich endete mit diesem Befehl call pyuic5 dockwidget_base.ui --from-imports -o dockwidget_base.py. Es funktioniert perfekt.
Siegel
1
Aktualisieren Sie meine Antwort mit Ihrer Lösung
Fran Raga
2

Nachdem ich alles über die Umgebungsvariablen herausgefunden hatte und wusste, wonach ich suchte, fand ich die Datei /osgeo4w_root/bin/python-qgis-dev.bat

Beim Aufruf von der aktiven osgeo4w-Shell wird die gesamte Umgebung festgelegt. Variablen durch Aufrufen der entsprechenden .bat-Dateien (wie von Francisco vorgeschlagen)!

Hannes Kohlmann
quelle