Hola, la tabla de contenido (TOC) ha sido históricamente un problema en QGIS debido a que la manera de programarla desde pyQGIS cambia casi con cada versión.
En la versión 1.8.0 de QGIS, si te das cuenta, cuando agregas una capa desde pyQGIS, la capa queda en la 1era posición si es que no hay capa seleccionada, pero si hay una capa seleccionada en la TOC entonces la nueva capa se sitúa 1 posición arriba de la seleccionada. Como si fuera poco, para contribuir al problema, en la versión 1.8.0 se agregó la funcionalidad de tener un listado aparte de capas para controlar el renderizado, esto es, si el usuario lo decide, la TOC no necesariamente refleja el orden de renderizado!
Sin embargo, esto es programación y casi siempre hay soluciones

, por más que sea utilizando fuerza bruta

. Si en tu TOC no vas a manejar grupos de capas, el siguiente script te puede dar luces sobre cómo se carga una capa siempre en la 1era posición de la TOC. Lo he probado en QGIS 1.8.0 en la terminal de Python de QGIS y parece funcionar. Como ves, hay que entrar a las entrañas de QGIS, cosa nada deseable, pues debería existir esta posibilidad con funciones de más alto nivel (es decir, sin llegar a manejar objetos Qt4).
from PyQt4.QtCore import *
from PyQt4.QtGui import *
iface=qgis.utils.iface
layer = QgsVectorLayer("/ruta/a/un/shapefile.shp", "mi_shape", "ogr")
mc = iface.mapCanvas()
mc.setRenderFlag( False ) # Evitar que el canvas dibuje
QgsMapLayerRegistry.instance().addMapLayers([layer])
mw = iface.mainWindow()
lgd = mw.findChild(QTreeWidget, "theMapLegend")
# Si hay item seleccionado, la nueva capa queda ubicada arriba de este, ocupando ahora su índice
if lgd.currentItem().isSelected():
item = lgd.currentItem()
index = lgd.indexOfTopLevelItem( item )
lgd.takeTopLevelItem( index )
lgd.insertTopLevelItem( 0, item )
layers = mc.layers()
layer = layers.pop(index)
layers.insert(0, layer)
mc.setLayerSet([qgis.gui.QgsMapCanvasLayer(l) for l in layers])
else:
print "La nueva capa ya está en la 1era posición"
mc.setRenderFlag( True ) # Activar de nuevo el canvas
Espero te sirva, no se cómo más lograrlo,
Saludos,
Tuxman
Pdta: Me basé en este post de StackExchange para la respuesta:
gis.stackexchange.com/questions/41977/so...is-table-of-contents