Dokumentasi
Di sini Anda dapat menemukan apa yang baru dan yang rusak di bawah API PyQGIS .
Untuk mendapatkan rincian tentang cara port Python2 ke Python3 pergi ke sana
Anda dapat menemukan beberapa detail tentang pengujian dari QGIS2 ke QGIS3 pada pertanyaan ini: Menulis tes otomatis untuk plugin QGIS?
Dan Anda akan menemukan makalah OpenGis.ch yang menarik di sini tentang alat migrasi.
Apa yang akan berubah menjadi kode saya
Bahkan, Anda perlu mengubah kode plugin yang tidak siap untuk melewati versi baru.
Anda mendapatkan fungsi qgis.utils.QGis.QGIS_VERSION_INT yang dibuat untuk memeriksa versi QGIS. Ini berguna ketika suatu fungsi tidak digunakan lagi. Contohnya setSelectedFeatures
sejak 2.16.
Dengan mencontoh penggunaan if
pernyataan:
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 ] )
Itu sama tentang PyQt
objek yang Anda impor di bawah modul Anda. Jika Anda memerlukan kompatibilitas, harganya adalah menulis lebih banyak baris kode (kode dengan fungsi QGIS2 dan kode dengan fungsi QGIS3 DAN juga kode untuk memeriksa versi dan kemampuan untuk mengimpor perpustakaan baru).
Tentang pustaka PyQt
PyQt5 tidak kompatibel dengan PyQt4; ada beberapa perubahan signifikan pada PyQt5. Namun, tidak terlalu sulit untuk menyesuaikan kode lama ke perpustakaan baru. Perbedaannya antara lain sebagai berikut:
Modul python telah ditata ulang. Beberapa modul telah dijatuhkan (QtScript), yang lain telah dibagi menjadi submodula (QtGui, QtWebKit).
Modul baru telah diperkenalkan, termasuk QtBluetooth, QtPositioning, atau Enginio.
- PyQt5 hanya mendukung sinyal dan slot gaya baru. Panggilan ke SIGNAL () atau SLOT () tidak lagi didukung. PyQt5 tidak mendukung bagian apa pun dari Qt API yang ditandai sebagai usang atau usang di Qt v5.0.
sumber: ( http://zetcode.com/gui/pyqt5/introduction/ )
Berikut ini beberapa contoh perubahan dari / dari pernyataan impor Anda:
Ingat dengan PyQt4 Anda harus melihat pada dokumen API:
untuk contoh
modul
PyQT4 QtCore modul PyQT4 QtGui
from PyQt4.QtCore import QSettings, QTranslator, qVersion, QCoreApplication, Qt, QObject, SIGNAL
from PyQt4.QtGui import QAction, QIcon, QDialog, QFormLayout
Dan dengan PyQt5 Anda sekarang harus melihat pada dokumen API tersebut:
Modul
PyQt5 QtCore Modul PyQt5 QtGui
sehingga menjadi:
from PyQt5.QtCore import QSettings, QTranslator, QVersionNumber, QCoreApplication, Qt, QObject, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QAction, QDialog, QFormLayout
Perhatikan bahwa:
Modul QtGui telah dipecah menjadi submodul. Modul QtGui berisi kelas-kelas untuk integrasi sistem windowing, penanganan acara, grafik 2D, pencitraan dasar, font dan teks. Ini juga mengandung satu set lengkap OpenGL dan OpenGL ES binding (lihat Dukungan untuk OpenGL ). Pengembang aplikasi biasanya akan menggunakan ini dengan API tingkat yang lebih tinggi seperti yang terdapat dalam modul QtWidgets.
Dan PyQt5 hanya mendukung sinyal dan slot gaya baru! lihat halaman ini untuk memahami cara menggunakan pyqtSignal
, connect
dan e
objek acara daripada menggunakan SIGNAL
.
Buat itu kompatibel
Jadi dengan kompatibilitas antara PyQt4 / PyQt5 (dan QGIS2 / QGIS3 juga) Anda perlu mencoba / kecuali impor sebelum menggunakan 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
Dan jangan lupa bahwa Anda perlu mengubah juga beberapa fungsi spesifik di bawah kode Anda dengan menambahkan pernyataan try / exception atau if.
from PyQt4.QtCore import *
denganfrom PyQt4.QtCore import QSomething, QWhatever, QElse
, dengan ini akan membuat skrip migrasi melakukan langkah terakhir dengan benar (termasuk penyesuaian yang diperlukan ketika modul berubah), jadi tidak perlu dicoba kecuali impor diperlukan.