プロジェクトをロードする

時々プラグインから、または(しばしば)スタンドアローンのQGIS Pythonアプリケーションを開発する時に既存のプロジェクトをロードする必要があります(参照: Python アプリケーション )。

プロジェクトを現在のQGISアプリケーションにロードするには、 QgsProject クラスのインスタンスを作成する必要があります。これはシングルトンクラスなので、それを行うには instance() メソッドを使わなければなりません。 read() メソッドを呼び出して、読み込むプロジェクトのパスを渡すことができます。

# 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'

プロジェクトに変更を加え(たとえば、レイヤーを追加または削除するために)変更を保存する必要がある場合は、プロジェクトインスタンスの 方法:meth:write() <qgis.core.QgsProject.write> メソッドを呼び出します。 write() メソッドはプロジェクトを新しい場所に保存するためのオプションのパスも受け付けます。

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

read()write() の両方の関数は操作が成功したかどうかをチェックするために使用できるブール値を返します。

注釈

QGISスタンドアロンアプリケーションを作成している場合は、ロードされたプロジェクトをキャンバスと同期させるために、 QgsLayerTreeMapCanvasBridge を以下の例のようにインスタンス化する必要があります:

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')