Qgis:索引器错误:列表索引超出范围

2024-10-04 01:34:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在qgis中制作插件,但我有一个问题。 当我把代码放在插件下的python控制台中时,这是有效的:

  def Style_for_layer():
    layer = qgis.utils.iface.legendInterface().layers()[0]
    if layer.type() == QgsMapLayer.VectorLayer and layer.geometryType() == QGis.Point and layer.name() in ["one","two"]:
         layer.loadNamedStyle('C:/Users/user/Desktop/style_one.qml')
    elif layer.type() == QgsMapLayer.VectorLayer and layer.geometryType() == QGis.Line and layer.name() == "some name layer":
  layer.loadNamedStyle('C:/Users/user/Desktop/style_two.qml')
    else:
            pass
    legend = qgis.utils.iface.legendInterface()
    legend.itemAdded.connect(Style_for_layer)

另一方面,当我用“plugin buildier”制作插件时,这不起作用:

^{pr2}$

当我尝试使用插件时:

IndexError: list index out of range

为什么在控制台它可以工作,但在插件中不工作?在


Tags: andname插件layerforstyletypeutils
1条回答
网友
1楼 · 发布于 2024-10-04 01:34:24

只需查找返回值qgis.utils.iface.legentInterface().layers()。在

如果您在插件中,这不是访问iface的方法,因为它在插件初始化时作为参数传递。在

无论如何,legendInterface是不推荐使用的,您应该使用层注册表来完成此操作。在

QgsMapLayerRegistry.instance().mapLayers()将返回所有层的字典,或者mapLayer(my_layer_id)将返回正确的层。在

相关问题 更多 >