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 setSelectedFeatures
dal 2.16.
Per esempio con l'uso della if
dichiarazione:
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 PyQt
vale 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
, connect
e e
oggetto 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.