Projecten laden¶

Soms moet u een bestaand project uit een plug-in laden of (nog vaker) bij het ontwikkelen van een zelfstandige toepassing in Python voor QGIS (zie: Toepassingen in Python).

U dient een instance te maken van de klasse QgsProject om een project in de huiidge toepassing QGIS te laden . Dit is een klasse singleton, dus u moet eerst de methode instance() ervan gebruiken om dat te doen. U kunt de methode read() ervan aanroepen, waarin het pad van het te laden project wordt doorgegeven:

# If you are not inside a QGIS console you first need to import
# qgis and PyQt classes you will use in this script as shown below:
from qgis.core import QgsProject
# 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())
'/home/user/projects/my_qgis_project.qgs'
# Load another project
project.read('/home/user/projects/my_other_qgis_project.qgs')
print(project.fileName())
'/home/user/projects/my_other_qgis_project.qgs'

Als u aanpassingen moet maken aan het project (bijvoorbeeld enige lagen toevoegen of verwijderen) en uw wijzigingen opslaan, roep de methode write() van uw instance voor het project aan. De methode write() accepteert ook een optioneel pad voor het opslaan van het project op een nieuwe locatie:

# Save the project to the same
project.write()
# ... or to a new file
project.write('/home/user/projects/my_new_qgis_project.qgs')

Beide functies read() en write() geven een Booleaanse waarde terug die u kunt gebruiken om te controleren of de bewerking succesvol was.

Notitie

U dient, als u een zelfstandige toepassing voor QGIS schrijft, een klasse QgsLayerTreeMapCanvasBridge te instantiëren zoals in het voorbeeld hieronder om het geladen project te synchroniseren met het kaartvenster:

bridge = QgsLayerTreeMapCanvasBridge( \
         QgsProject.instance().layerTreeRoot(), canvas)
# Now you can safely load your project and see it in the canvas
project.read('/home/user/projects/my_other_qgis_project.qgs')