我试图在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
为什么在控制台它可以工作,但在插件中不工作?在
只需查找返回值
qgis.utils.iface.legentInterface().layers()
。在如果您在插件中,这不是访问iface的方法,因为它在插件初始化时作为参数传递。在
无论如何,
legendInterface
是不推荐使用的,您应该使用层注册表来完成此操作。在QgsMapLayerRegistry.instance().mapLayers()
将返回所有层的字典,或者mapLayer(my_layer_id)
将返回正确的层。在相关问题 更多 >
编程相关推荐