Tài liệu
Tại đây bạn có thể tìm thấy những gì mới và những gì vi phạm trong API PyQGIS .
Để biết chi tiết về cách chuyển Python2 sang Python3, hãy truy cập vào đó
Bạn có thể tìm thấy một số chi tiết về thử nghiệm từ QGIS2 đến QGIS3 cho câu hỏi này: Viết thử nghiệm tự động cho các plugin QGIS?
Và bạn sẽ tìm thấy một bài báo thú vị của OpenGis.ch ở đây về các công cụ di chuyển.
Điều gì sẽ thay đổi vào mã của tôi
Trên thực tế, bạn cần thay đổi mã của plugin chưa được chuẩn bị để chuyển qua phiên bản mới.
Bạn nhận được hàm qgis.utils.QGis.QGIS_VERSION_INT được thực hiện để kiểm tra phiên bản QGIS. Điều này là hữu ích khi một chức năng không được chấp nhận. Ví dụ setSelectedFeatures
từ 2.16.
Bằng cách sử dụng if
câu lệnh:
if qgis.utils.QGis.QGIS_VERSION_INT < 21600 :
joinLayer.setSelectedFeatures( [ f.id() for f in request ] )
else:
joinLayer.selectByIds( [ f.id() for f in request ] )
Nó giống nhau về PyQt
đối tượng bạn nhập theo mô-đun của bạn. Nếu bạn cần khả năng tương thích, giá là để viết thêm dòng mã (mã có chức năng QGIS2 và mã có chức năng QGIS3 VÀ cũng là mã để kiểm tra phiên bản và khả năng nhập thư viện mới).
Giới thiệu về thư viện PyQt
PyQt5 không tương thích ngược với PyQt4; có một số thay đổi đáng kể trong PyQt5. Tuy nhiên, không khó để điều chỉnh mã cũ sang thư viện mới. Sự khác biệt là, trong số những người khác, như sau:
Các mô-đun Python đã được tổ chức lại. Một số mô-đun đã bị loại bỏ (QtScript), một số mô-đun khác đã được chia thành các mô hình con (QtGui, QtWebKit).
Các mô-đun mới đã được giới thiệu, bao gồm QtBluetooth, QtP vị trí hoặc Enginio.
- PyQt5 chỉ hỗ trợ tín hiệu kiểu mới và handlig. Các cuộc gọi đến TÍN HIỆU () hoặc SLOT () không còn được hỗ trợ. PyQt5 không hỗ trợ bất kỳ phần nào của API Qt được đánh dấu là không dùng nữa hoặc lỗi thời trong Qt v5.0.
nguồn: ( http://zetcode.com/gui/pyqt5/int sinhtion / )
Dưới đây là một số ví dụ về các thay đổi trong câu lệnh from / import của bạn:
Hãy nhớ với PyQt4, bạn phải xem tài liệu của API:
ví dụ
mô-đun PyQT4 QtCore mô-đun
PyQT4 QtGui
from PyQt4.QtCore import QSettings, QTranslator, qVersion, QCoreApplication, Qt, QObject, SIGNAL
from PyQt4.QtGui import QAction, QIcon, QDialog, QFormLayout
Và với PyQt5, bây giờ bạn có thể xem tài liệu của các API đó:
mô-đun PyQt5 QtCore Mô-đun
PyQt5 QtGui
vì vậy mà trở thành:
from PyQt5.QtCore import QSettings, QTranslator, QVersionNumber, QCoreApplication, Qt, QObject, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QAction, QDialog, QFormLayout
Lưu ý rằng:
Mô-đun QtGui đã được chia thành các mô hình con. Mô-đun QtGui chứa các lớp để tích hợp hệ thống cửa sổ, xử lý sự kiện, đồ họa 2D, hình ảnh cơ bản, phông chữ và văn bản. Nó cũng chứa một bộ hoàn chỉnh các ràng buộc OpenGL và OpenGL ES (xem Hỗ trợ cho OpenGL ). Các nhà phát triển ứng dụng thường sử dụng điều này với các API cấp cao hơn, chẳng hạn như các API có trong mô-đun QtWidgets.
Và PyQt5 chỉ hỗ trợ tín hiệu kiểu mới và khe cắm handlig! có một cái nhìn trang này để hiểu làm thế nào để sử dụng pyqtSignal
, connect
và e
đối tượng sự kiện thay vì sử dụng SIGNAL
.
Làm cho nó tương thích
Vì vậy, với khả năng tương thích giữa PyQt4 / PyQt5 (và cả QGIS2 / QGIS3), bạn cần thử / ngoại trừ việc nhập trước khi sử dụng librarie pyQt5.
try:
from PyQt5.QtCore import QSettings, QTranslator, QVersionNumber, QCoreApplication, Qt, QObject, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QAction, QDialog, QFormLayout
except:
from PyQt4.QtCore import QSettings, QTranslator, qVersion, QCoreApplication, Qt, QObject, SIGNAL
from PyQt4.QtGui import QAction, QIcon, QDialog, QFormLayout
Và đừng quên rằng bạn cũng cần thay đổi một số chức năng cụ thể theo mã của mình bằng cách thêm câu lệnh try / trừ hoặc if.
from PyQt4.QtCore import *
bằngfrom PyQt4.QtCore import QSomething, QWhatever, QElse
, điều này sẽ làm cho tập lệnh di chuyển thực hiện bước cuối cùng một cách chính xác (bao gồm các điều chỉnh cần thiết khi các mô-đun thay đổi), do đó không cần thử ngoại trừ nhập.