Bagaimana cara mengkompilasi file antarmuka pengguna QtDesigner (.ui) dan sumber daya (.qrc) dengan QGIS 3 di Windows?

8

Saya mencoba mengubah proses QGIS 2 tanpa hasil.

Saya pertama kali harus mengedit C: \ Program Files \ QGIS 2.99 \ etc \ ini \ python-core.bat yang berisi referensi ke Python27 bukan Python36.

Saya menjalankan C: \ Program Files \ QGIS 2.99 \ bin \ o4w_env.bat untuk mengkonfigurasi lingkungan python QGIS dengan benar, tetapi kemudian, ketika saya meluncurkan:

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

Saya mendapatkan kesalahan ini:

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.

Demikian pula ketika saya meluncurkan:

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

Saya mendapatkan kesalahan ini:

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
sumber

Jawaban:

11

Anda perlu mengatur lingkungan PyQT5. Ini adalah skrip saya untuk mengkompilasi Plugin QGIS 3 dan memiliki 3 kelelawar komplementer.

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

Anda hanya perlu perubahan set OSGEO4W_ROOT=D:\OSGeo4W64untuk set OSGEO4W_ROOT="C:\Program Files\QGIS 2.99", atau sesuatu seperti itu,

Coba gunakan .bat ini

Catatan: kelelawar ini ada di folder yang sama dengan plugin

Catatan 2: Untuk mengimpor impor resources_rc perlu trik ini

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

jalur ini mungkin berubah di plugin lain. pyuic5

@sigeal soluton untuk Catatan 2:

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

Saya harap ini membantu

Fran Raga
sumber
1
Jawaban yang bagus, itulah tepatnya yang saya cari. Terima kasih.
sigeal
Namun satu pertanyaan: "import resources_rc" di akhir file yang dihasilkan memberi saya kesalahan "Tidak ada modul bernama 'resources_rc'". Saya dapat menghilangkan kesalahan ini dengan "from. Import resources_rc" tetapi ini bukan solusi yang tepat karena file dihasilkan ... Apakah saya melewatkan sesuatu?
sigeal
1
Oke, Anda perlu menambahkan ini call pyuic5 --import-from <package-name>.gui.generated. Perlu meletakkan path untuk file sumber daya Anda dan kompilasi lagi.
Fran Raga
1
Saya mengakhiri dengan perintah ini call pyuic5 dockwidget_base.ui --from-imports -o dockwidget_base.py. Ini bekerja dengan sempurna.
sigeal
1
Perbarui jawaban saya dengan solusi Anda
Fran Raga
2

Setelah menemukan segala sesuatu tentang variabel lingkungan dan mengetahui apa yang saya cari, saya menemukan file /osgeo4w_root/bin/python-qgis-dev.bat

Ketika dipanggil dari shell osgeo4w aktif, ia mengatur semua env. variabel dengan memanggil file .bat yang sesuai (seperti yang disarankan oleh Francisco)!

Hannes Kohlmann
sumber