belgeleme
Burada yeni ve neyin kırıldığını PyQGIS API'sinde bulabilirsiniz .
Python2'yi Python3'e nasıl taşıyacağınız hakkında bilgi almak için oraya gidin
QGIS2'den QGIS3'e test hakkında şu soru hakkında ayrıntılı bilgi bulabilirsiniz: QGIS eklentileri için otomatik testler mi yazıyorsunuz ?
Burada , taşıma araçları hakkında ilginç bir OpenGis.ch makalesi bulacaksınız .
Koduma ne değişecek
Aslında, yeni bir sürümü geçmeye hazır olmayan eklenti kodunu değiştirmeniz gerekir.
QGIS sürümünü kontrol etmek için yapılan qgis.utils.QGis.QGIS_VERSION_INT işlevini alırsınız . Bir işlev kullanımdan kaldırıldığında bu yararlıdır. 2.16'dan setSelectedFeatures
beri örnek için .
İfadenin kullanımı ile örnek olarak if
:
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 ] )
PyQt
Modülünüz altında içe aktardığınız nesne ile aynıdır . Uyumluluğa ihtiyacınız varsa, fiyat daha fazla kod satırı yazacaktır (QGIS2 işlevli kod ve QGIS3 işlevli kod VE ayrıca sürümü ve yeni kitaplıkları içe aktarma yeteneklerini kontrol etme kodu).
PyQt kütüphaneleri hakkında
PyQt5, PyQt4 ile geriye dönük olarak uyumlu değildir; PyQt5'te birkaç önemli değişiklik var. Ancak, eski kodu yeni kitaplığa ayarlamak çok zor değildir. Farklılıklar, diğerlerinin yanı sıra, aşağıdakilerdir:
Python modülleri yeniden düzenlendi. Bazı modüller bırakıldı (QtScript), diğerleri alt modüllere (QtGui, QtWebKit) ayrıldı.
QtBluetooth, QtPositioning veya Enginio dahil olmak üzere yeni modüller piyasaya sürüldü.
- PyQt5 yalnızca yeni stil sinyalini ve yuvaları handlig'i destekler. SIGNAL () veya SLOT () çağrıları artık desteklenmiyor. PyQt5, Qt API'sinin Qt v5.0'da kullanım dışı veya eski olarak işaretlenmiş hiçbir bölümünü desteklemez.
kaynak: ( http://zetcode.com/gui/pyqt5/introduction/ )
İşte / import ifadenizdeki değişikliklere ilişkin bazı örnekler:
PyQt4 ile API'nın belgesine bakmanız gerektiğini hatırlayın :
örnek
PyQT4 QtCore modülü için
PyQT4 QtGui modülü
from PyQt4.QtCore import QSettings, QTranslator, qVersion, QCoreApplication, Qt, QObject, SIGNAL
from PyQt4.QtGui import QAction, QIcon, QDialog, QFormLayout
Ve PyQt5 ile şimdi bu API'nın dokümanı:
PyQt5 QtCore modülü
PyQt5 QtGui modülü
böylece:
from PyQt5.QtCore import QSettings, QTranslator, QVersionNumber, QCoreApplication, Qt, QObject, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QAction, QDialog, QFormLayout
Bunu not et :
QtGui modülü alt modüllere ayrılmıştır. QtGui modülü pencereleme sistemi entegrasyonu, olay işleme, 2D grafikler, temel görüntüleme, yazı tipleri ve metin sınıfları içerir. Ayrıca eksiksiz bir OpenGL ve OpenGL ES bağlamaları seti içerir (bkz . OpenGL Desteği ). Uygulama geliştiricileri bunu normalde QtWidgets modülünde bulunanlar gibi daha üst düzey API'lerle kullanırlar.
Ve PyQt5 sadece yeni stil sinyal ve yuvaları handlig destekler! Bir bu sayfayı göz nasıl kullanılacağını anlamak için pyqtSignal
, connect
ve e
olay nesnesini yerine kullanılmasını SIGNAL
.
Uyumlu hale getirin
Bu nedenle PyQt4 / PyQt5 (ve QGIS2 / QGIS3) arasındaki uyumluluk ile pyQt5 kütüphanesini kullanmadan önce içe aktarmayı denemeniz / hariç tutmanız gerekir.
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
Ayrıca, try / hariç veya if ifadesi ekleyerek kodunuzun altındaki bazı belirli işlevleri de değiştirmeniz gerektiğini unutmayın.
from PyQt4.QtCore import *
ilefrom PyQt4.QtCore import QSomething, QWhatever, QElse
bu taşıma Senaryo çok hayır, düzgün (modüller değiştirildi gerekli ayarlamaları dahil) son adımı yapacak deneyin-hariç ithalatı ihtiyaç vardır.