麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

QGIS中如何快速查看统计选中图层数量(两种方法)

在使用 QGIS 处理大量图层时,经常需要同时选中多个图层进行操作。但图层一多,就很难快速看出到底选中了多少个——别慌,用 PyQGIS 写个小工具就能轻松解决!

今天小编给大家分享两种实时显示选中图层数量的方法,操作简单、代码清晰,有需要的可以尝试。

方案一:实时显示选中图层总数

这是目前社区里最受欢迎的做法,适合快速查看选中图层的总数。具体的代码实现方法如下:

from qgis.PyQt.QtWidgets import QLabel

label = QLabel("Selected Layers Count:")
count = QLabel()

tree_view = iface.layerTreeView()
c = len(tree_view.selectedLayers())
count.setText(str(c))

tb = iface.addToolBar("Selected layers")
tb.addWidget(label)
tb.addWidget(count)

def show_selected_layers_count():
    c = len(tree_view.selectedLayers())
    count.setText(str(c))

tree_view.selectionModel().selectionChanged.connect(show_selected_layers_count)

直接在QGIS中运行上述代码,效果如图:

实现原理​​:

  • 通过 iface.layerTreeView()获取图层树;
  • 初始计算选中数量并显示;
  • 借助 selectionChanged信号实现实时更新。

方案二:按图层组统计选中数量

上述的方案简单快捷,但有一个小问题就是不支持图层组,这是一个增强版方案。

代码如下:

from qgis.PyQt.QtWidgets import QLabel
from qgis.core import QgsProject

p = QgsProject.instance()
root = p.layerTreeRoot()
view = iface.layerTreeView()

tb = iface.addToolBar("Selected layers")

def show_selected_layers_count():
    tb.clear()
    tb.addWidget(QLabel('Selected layers per group:      '))
    for child in root.children():
        if root.isGroup(child):
            label = QLabel(f'{child.name()}: ')
            selected_layers = []
            for selectedLayer in view.selectedNodes():
                if selectedLayer.parent() == child:
                    selected_layers.append(selectedLayer)
            count = len(selected_layers)
            count_label = QLabel(str(count) + '    ')
            tb.addWidget(label)
            tb.addWidget(count_label)

con = view.selectionModel().selectionChanged.connect(show_selected_layers_count)
# 如需断开连接可使用:
# view.selectionModel().selectionChanged.disconnect(con)

运行结果如下:

总结

最后,小编建议大家将脚本保存为.py文件并放入 QGIS 的启动脚本目录(例如 ~/.qgis3/python),这样即可实现每次启动 QGIS 时自动加载;若想进一步扩展功能,可对方法二进行优化,例如增加对递归子组的统计支持或自定义显示样式;此外,还可以尝试为标签添加背景色、边框等样式调整,让界面显示更加直观美观。

全部QGIS笔记

本站所有的QGIS学习笔记-->QGIS 学习笔记汇总

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子
没有下文

留言板(小编看到第一时间回复)