For QGIS versions QGIS 2.16 and higher
Let's define the following handy function:
def setColumnVisibility( layer, columnName, visible ):
config = layer.attributeTableConfig()
columns = config.columns()
for column in columns:
if column.name == columnName:
column.hidden = not visible
break
config.setColumns( columns )
layer.setAttributeTableConfig( config )
And then you can call it to hide or show columns in the attribute table. For example:
vLayer = iface.activeLayer()
setColumnVisibility( vLayer, 'FIRST_COLUMN', False ) # Hide FIRST_COLUMN
setColumnVisibility( vLayer, 'area', False ) # Hide area column
setColumnVisibility( vLayer, 'FIRST_COLUMN', True ) # Show FIRST_COLUMN
setColumnVisibility( vLayer, 'area', True ) # Show area column
QgsAttributeTableDialogis not exposed through the API. – Germán Carrillo Dec 20 '20 at 22:42attrTables = [d for d in QApplication.instance().allWidgets() if d.objectName() == u'QgsAttributeTableDialog' or d.objectName() == u'AttributeTable'] attrTables[0].close() iface.showAttributeTable(lyr)https://gis.stackexchange.com/questions/231574/how-to-close-all-or-distinct-attribute-table-with-pyqgis and https://gis.stackexchange.com/questions/68332/opening-attribute-table-using-pyqgis – BERA Dec 21 '20 at 13:57