Documentazione
Qui puoi trovare le novità e le interruzioni nell'API PyQGIS .
Per ottenere dettagli su come trasferire Python2 su Python3, vai lì
Puoi trovare alcuni dettagli sui test da QGIS2 a QGIS3 su questa domanda: Scrivere test automatizzati per i plug-in QGIS?
E qui troverai un interessante documento di OpenGis.ch sugli strumenti di migrazione.
Cosa cambierà nel mio codice
In effetti, è necessario modificare il codice del plug-in che non è pronto per passare a una nuova versione.
Si ottiene qgis.utils.QGis.QGIS_VERSION_INT funzione che è fatto per verificare la versione di QGIS. Ciò è utile quando una funzione è disabilitata. Ad esempio setSelectedFeaturesdal 2.16.
Per esempio con l'uso della ifdichiarazione:
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 ] )
Lo stesso PyQtvale per l' oggetto che importi sotto il tuo modulo. Se hai bisogno di compatibilità, il prezzo è quello di scrivere più righe di codice (il codice con la funzione QGIS2 e il codice con le funzioni QGIS3 E anche il codice per controllare la versione e le capacità per importare nuove librerie).
Informazioni sulle librerie PyQt
PyQt5 non è retrocompatibile con PyQt4; ci sono diverse modifiche significative in PyQt5. Tuttavia, non è molto difficile adattare il codice precedente alla nuova libreria. Le differenze sono, tra le altre, le seguenti:
I moduli Python sono stati riorganizzati. Alcuni moduli sono stati eliminati (QtScript), altri sono stati suddivisi in sottomoduli (QtGui, QtWebKit).
Sono stati introdotti nuovi moduli, tra cui QtBluetooth, QtPosition o Enginio.
- PyQt5 supporta solo il segnale di nuova concezione e gli slot handlig. Le chiamate a SIGNAL () o SLOT () non sono più supportate. PyQt5 non supporta alcuna parte dell'API Qt contrassegnata come obsoleta o obsoleta in Qt v5.0.
fonte: ( http://zetcode.com/gui/pyqt5/introduction/ )
Ecco alcuni esempi di modifiche nella tua dichiarazione from / import:
Ricorda che con PyQt4 hai dovuto consultare il documento dell'API:
ad esempio il
modulo
QtCore PyQT4 Modulo QtGui PyQT4
from PyQt4.QtCore import QSettings, QTranslator, qVersion, QCoreApplication, Qt, QObject, SIGNAL
from PyQt4.QtGui import QAction, QIcon, QDialog, QFormLayout
E con PyQt5 ora devi guardare il documento di quelle API:
PyQt5 QtCore module
PyQt5 QtGui module
in modo che diventino:
from PyQt5.QtCore import QSettings, QTranslator, QVersionNumber, QCoreApplication, Qt, QObject, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QAction, QDialog, QFormLayout
Nota che :
Il modulo QtGui è stato suddiviso in sottomoduli. Il modulo QtGui contiene classi per l'integrazione del sistema di finestre, gestione degli eventi, grafica 2D, imaging di base, caratteri e testo. Contiene inoltre un set completo di associazioni OpenGL e OpenGL ES (consultare Supporto per OpenGL ). Gli sviluppatori di applicazioni lo userebbero normalmente con API di livello superiore come quelle contenute nel modulo QtWidgets.
E PyQt5 supporta solo il segnale nuovo stile e slot handlig! avere uno sguardo a questa pagina per capire come usare pyqtSignal, connecte eoggetto evento invece di utilizzo SIGNAL.
Renderlo compatibile
Quindi, con la compatibilità tra PyQt4 / PyQt5 (e anche QGIS2 / QGIS3) è necessario provare / tranne l'importazione prima di utilizzare le librerie 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
E non dimenticare che è necessario modificare anche alcune funzioni specifiche nel codice aggiungendo l'istruzione try / tranne o if.
from PyQt4.QtCore import *confrom PyQt4.QtCore import QSomething, QWhatever, QElse, questo farà sì che lo script di migrazione esegua correttamente l'ultimo passaggio (compresi gli aggiustamenti richiesti in caso di modifica dei moduli), quindi non sono necessarie prove tranne le importazioni.