7

The following code inserts my new_layer just above the active layer in the QGIS ToC.

new_layer = iface.addRasterLayer(...) 

Instead, I'd like my new_layer to be inserted at the top of the QGIS ToC.

Do you know how can I do it?

  • did you check gis.stackexchange.com/questions/41977/…? – underdark Feb 18 '14 at 19:48
  • 2
    Is it necessary to create groups to move up a layer ? I thought of something like: li = iface.legendInterface(); li.moveLayerIndex(new_layer, 0), just as simple as manuallly dragging up a layer in the left column to put it in first rank. Does a similar method exist ? – Eric H. Feb 19 '14 at 6:23
6

By using the new Layer tree (aka legend or ToC) added by Martin Dobias since QGIS v.2.4, you can load a layer to the top of the ToC following these steps:

  1. Get a reference of the layer tree

    root = QgsProject.instance().layerTreeRoot()
    
  2. Create the layer object

    from PyQt4.QtCore import QFileInfo
    fileName = "/path/to/raster/file.tif"
    fileInfo = QFileInfo(fileName)
    baseName = fileInfo.baseName()
    mylayer = QgsRasterLayer(fileName, baseName)
    
  3. Add the layer to the QGIS Map Layer Registry

    QgsMapLayerRegistry.instance().addMapLayer(mylayer, False)
    
  4. Insert the layer at the top of the ToC (position 0)

    root.insertLayer(0, mylayer)
    

That's it!

| improve this answer | |
0

I have not found a way to do it after having added the layers but two alternative options are:

  • Create groups, then you can use moveLayers to put layers in a group
  • Add the layers in the right order !
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.