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.

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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.