Làm cách nào để biên dịch các tệp giao diện người dùng QtDesigner (.ui) và tài nguyên (.qrc) với QGIS 3 trên Windows?


8

Tôi đã cố gắng chuyển đổi quá trình QGIS 2 nhưng không thành công.

Trước tiên tôi phải chỉnh sửa C: \ Program Files \ QGIS 2.99 \ etc \ ini \ python-core.bat có chứa các tham chiếu đến Python27 thay vì Python36.

Tôi chạy C: \ Program Files \ QGIS 2.99 \ bin \ o4w_env.bat để định cấu hình đúng môi trường python của QGIS, nhưng sau đó, khi tôi khởi chạy:

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

Tôi nhận được lỗi này:

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.

Tương tự, khi tôi khởi chạy:

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

Tôi nhận được lỗi này:

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.

Câu trả lời:


11

Bạn cần đặt môi trường PyQT5. Đây là tập lệnh của tôi để biên dịch các plugin QGIS 3 và có 3 dơi bổ sung.

biên dịch_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

Bạn chỉ cần thay đổi set OSGEO4W_ROOT=D:\OSGeo4W64cho set OSGEO4W_ROOT="C:\Program Files\QGIS 2.99", hoặc một cái gì đó như thế,

Hãy thử sử dụng .bat này

Lưu ý: dơi này nằm trong cùng thư mục với plugin

Lưu ý 2: Để nhập tài nguyên nhập_rc cần thủ thuật này

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

đường dẫn này có thể thay đổi trong các plugin khác. pyuic5

@sigeal soluton cho Note 2:

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

Tôi hy vọng nó sẽ giúp


1
Câu trả lời tuyệt vời, đó chính xác là những gì tôi đang tìm kiếm. Cảm ơn.
sigeal

Tuy nhiên, có một câu hỏi: "import resource_rc" ở cuối tệp được tạo cho tôi lỗi "Không có mô-đun có tên 'resource_rc'". Tôi có thể thoát khỏi lỗi này bằng "from. Import resource_rc" nhưng đây không phải là giải pháp chính xác vì tệp được tạo ... Tôi có bỏ lỡ điều gì không?
sigeal

1
Ok bạn cần thêm cái này call pyuic5 --import-from <package-name>.gui.generated. Cần đặt đường dẫn cho tệp tài nguyên của bạn và biên dịch lại.
Fran Raga

1
Tôi đã kết thúc với lệnh này call pyuic5 dockwidget_base.ui --from-imports -o dockwidget_base.py. Nó hoạt động hoàn hảo.
sigeal

1
Cập nhật câu trả lời của tôi với giải pháp của bạn
Fran Raga

2

Sau khi tìm ra mọi thứ về các biến môi trường và biết tôi đang tìm kiếm cái gì, tôi tìm thấy tệp /osgeo4w_root/bin/python-qgis-dev.bat

Khi được gọi từ shell osgeo4w hoạt động, nó đặt tất cả các env. biến bằng cách gọi các tệp .bat tương ứng (như được đề xuất bởi Francisco)!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.