Chargement de projets¶
Vous avez parfois besoin de charger un projet existant depuis une extension ou (le plus souvent) lorsque vous développez une application QGIS autonome (voir : :ref:`pythonapplications).
Pour charger un projet dans l’application QGIS courante, vous devez créer une instance de la classe QgsProject
. C’est un objet singleton, ce qui vous impose d’utiliser sa méthode instance()
. Vous pouvez appeler sa méthode read()
, en lui passant le chemin du projet à charger:
# 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'
Si vous avez besoin de réaliser des modifications du projet (par exemple ajouter ou supprimer des couches) et de sauver vos changements, appelez la méthode <qgis.core.QgsProject.write>` de votre instance de projet. La méthode write()
accepte également un chemin en option pour sauvegarder le projet à un nouvel emplacement:
# Save the project to the same
project.write()
# ... or to a new file
project.write('/home/user/projects/my_new_qgis_project.qgs')
Les deux fonctions read()
et write()
renvoie une valeur booléenne qui peut être utilisée pour vérifier que l’opération a réussi.
Note
Si vous codez une application QGIS autonome, afin de synchroniser le projet chargé avec le canevas il vous faut instancier QgsLayerTreeMapCanvasBridge
comme dans l’exemple ci dessous:
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')