iface.activeLayer()
访问目录中当前突出显示的层,但是我希望我的代码可以在所有层上运行。我在API中看不到任何可以轻松访问此功能的内容,并且找不到很好的在线示例,但也许我错过了一些东西?
#1 楼
试试...# substitute 'self' with 'qgis.utils.iface' when run from Python console
# 'self.iface = iface' would usually precede this command in your class
layers = self.iface.legendInterface().layers()
for layer in layers:
layerType = layer.type()
if layerType == QgsMapLayer.VectorLayer:
# do some stuff here
从QConsolidate插件的consolidatethread.py中删除。
从legendInterface()返回的QgsLegendInterface对象的描述。 />
编辑:在上方添加了有关“自我”的信息。
评论
谢谢!做到了。我想我也已经习惯了ESRI世界,其中图例是地图布局中的对象,目录是指图层列表。
– spencerrecneps
2012年5月26日23:53
请注意,此方法与Nathan提到的mapCanvas()技术之间返回的内容有所不同。 legendInterface()对象将返回所有图层,即使它们未在地图画布中显示,而mapCanvas()仅返回在画布上显示的图层。使用mapCanvas()是一种获取可见图层引用的好方法。
– dakcarto
2012年5月27日下午2:00
另外,最新版本的QGIS(> = 1.8)允许用户与图例中列出的顺序分开定义图层的渲染顺序(非常好!)。 legendInterface()和mapCanvas()方法分别返回每个图层的顺序。
– dakcarto
2012年5月27日在2:07
#2 楼
还有两种其他方法:layers = self.iface.mapCanvas().layers()
将为您提供层列表
或
layers = QgsMapLayerRegistry.instance().mapLayers()
for name, layer in layers.iteritems():
print name, layer.type()
评论
这个答案似乎在2.16及更高版本中不起作用
–拉斐尔
16 Dec 28 '21:27
#3 楼
对于QGIS 3,QgsMapLayerRegistry
的功能已移至QgsProject
。 因此,要遍历地图图层,应使用以下结构:
layers = QgsProject.instance().mapLayers()
.mapLayers()
返回结构为{layer_x_id: layer_x, layer_y_id: layer_y, ....}
的字典。然后您可以遍历以下图层:for layer_id, layer in layers.items():
print(layer.name())
因为
.mapLayers()
返回字典(dict
),所以您也可以使用字典的.values()
方法,该方法仅返回包含图层的list
在这种情况下。然后,您可以遍历以下层:layers = QgsProject.instance().mapLayers().values()
for layer in layers:
print(layer.name())
如果愿意,可以按照以下方式进行迭代:
layers = QgsProject.instance().mapLayers() # dictionary
for layer in layers.values():
print(layer.name())
评论
嗨!感谢分享。打印图层的名称效果很好...但是我无法打印字典的键。你能帮我吗?
– caio villaca
19年6月18日在18:39
对于层中的层:print(layer)您可以使用脚本来打印键。或者只使用print(layers.keys())而不进行for循环。
– KadirŞahbaz
19年6月18日在21:01
@Kadir大家好,我如何首先按组名在QGIS 3中的组层中进行迭代,然后再对该组中的nam层进行迭代?
–nmokht97
20 Jul 30'15:27
评论
我看不到你们如何使用QgsMapLayerRegistry或QgsProject。在QGIS 3.0.2中,这不起作用。但是,iface.mapCanvas()。layers()可以。好吧,有点。它似乎只为您提供活动的图层(您在“图层”窗格中检查的图层)。有谁知道如何获取所有图层的列表,甚至包括“图层”窗格中未选中的那些列表?另外,如果使用Plugin Builder,它会为您创建插件的外壳。运行功能具有“ self”参数,使用iface时需要使用该参数。即self.iface.mapCanvas()。layers(),仅供参考。