A volte potreste avere bisogno di caricare un progetto esistente da un plugin opuure (piú frequentemente) quando si sviluppa un’applicazione QGIS Python stand-alone (riferimento: Applicazioni Python).
Per caricare un progetto all’interno dell’applicazione QGIS corrente serve un oggetto QgsProject instance() e si deve invocare il suo metodo read() passandogli l’oggetto QFileInfo che contiene il percorso da cui il progetto verrà caricato:
# If you are not inside a QGIS console you first need to import
# qgis and PyQt4 classes you will use in this script as shown below:
from qgis.core import QgsProject
from PyQt4.QtCore import QFileInfo
# Get the project instance
project = QgsProject.instance()
# Print the current project file name (might be empty in case no projects have been loaded)
print project.fileName
u'/home/user/projects/my_qgis_project.qgs'
# Load another project
project.read(QFileInfo('/home/user/projects/my_other_qgis_project.qgs'))
print project.fileName
u'/home/user/projects/my_other_qgis_project.qgs'
Nel caso in cui si abbia bisogno di fare delle modifiche al progetto( ad esempio aggiungere o rimuovere alcuni layer) e salvare le modifiche, sará possibile chiamare il metodo write() dell’istanza del vostro progetto. Il metodo write() inoltre accetta opzionalmente QFileInfo che consente di specificare il percorso dove il progetto verrá salvato:
# Save the project to the same
project.write()
# ... or to a new file
project.write(QFileInfo('/home/user/projects/my_new_qgis_project.qgs'))
Sia read() che write() restituiscono un valore booleano che puó essere utilizzato per controllare che l’operazione si sia conclusa con successo.
Nota
Se stai scrivendo un’applicazione standalone, per sincronizzare il progetto caricato con la mappa è necessario inizializzare una classe QgsLayerTreeMapCanvasBridge come nell’esempio sotto:
bridge = QgsLayerTreeMapCanvasBridge( \
QgsProject.instance().layerTreeRoot(), canvas)
# Now you can safely load your project and see it in the canvas
project.read(QFileInfo('/home/user/projects/my_other_qgis_project.qgs'))