[GIS] Adding layer to group using PyQGIS

group-layerlayerslegendpyqgis

I am trying to add new layers into a specific group which I can get to work if I know the index, but how can I get Python to find the index of a group so it can load the new layer into the group wherever it is in the TOC?

qgis.utils.iface.legendInterface().moveLayer( layer, index )

Best Answer

[Updated to QGIS v3.x]

With the new layer list widget (aka legend, ToC or layer tree) added by Martin Dobias since QGIS v.2.4, you can follow this procedure from the QGIS Python console in order to add layers to a specific group (you won't need group indices anymore):

  1. Get the reference of the layer tree.

    root = QgsProject.instance().layerTreeRoot()

  2. Find the desired group (which could be a subgroup).

    mygroup = root.findGroup("streets_group") # We assume the group exists

  3. Create the layer object.

    mylayer = QgsVectorLayer("/Path/to/your/data.shp", "my layer", "ogr")

  4. Load it to the QgsProject (set the second parameter to False since you want to define a custom position for the layer).

    QgsProject.instance().addMapLayer(mylayer, False)

  5. Add the layer to the desired group.

    mygroup.addLayer(mylayer)

Source: QGIS Layer Tree API, Part 1 and Part 2, by Martin Dobias

Related Question