PyQGIS – Display Only Visible Canvas Features in Attribute Table

attribute-tablefiltermapcanvaspyqgisselect-by-expression

As explained by @xunilk in Getting attribute values from vector features visible in QGIS canvas using PyQGIS we can easily access to the attribute values of the features visible in the QGIS canvas (code below)

layer = iface.activeLayer()
mapcanvas = iface.mapCanvas()
rect = mapcanvas.extent()

request = QgsFeatureRequest().setFilterRect(rect)

selected_feats = layer.getFeatures(request)

attr = [ feat.attributes() for feat in selected_feats ]

print(attr)

However I'm struggling to find a way to display, in the attribute table, only the values of the visible features.

Do you have any suggestions?

Best Answer

I dont know what can be done in plugins and not, but in QGIS you can apply a filter:

layer = iface.activeLayer()
mapcanvas = iface.mapCanvas()
rect = mapcanvas.extent()
request = QgsFeatureRequest().setFilterRect(rect)
selected_feats = layer.getFeatures(request)

ids = [f.id() for f in selected_feats]
where_clause = '"id" IN{0}'.format(tuple(ids))
layer.setSubsetString(where_clause)