¿Abrir tabla de atributos usando PyQgis?

11

¿Es posible abrir una tabla de atributos desde la consola de Python o mediante un script de Python en QGIS?

redfrex
fuente

Respuestas:

12

Sí, al menos con la última versión maestra y 1.8. Es un método expuesto a través de iface

// C++ (signature)
void showAttributeTable (QgsVectorLayer *l)

# PyQGIS (example)
iface.showAttributeTable(iface.activeLayer())

Necesitará una referencia preexistente a un QgsVectorLayer.

Para la edición directa de características, también es un método expuesto a través de iface :

// C++ (signature)
bool openFeatureForm (QgsVectorLayer *l, QgsFeature &f, bool updateFeatureOnly=false)

# PyQGIS (example)
iface.openFeatureForm(iface.activeLayer(), feature, False)

Necesitará una referencia preexistente a un QgsVectorLayer y un QgsFeature en ambos casos. El formulario de entidad abierto y si es editable dependen de la configuración de la aplicación y de si la capa de la entidad está en modo de edición.

dakcarto
fuente
El ejemplo de Python funcionó bien para mí cuando estaba en la consola de Python. Sin embargo, intenté ejecutar este script en Processing, donde la capa = processing.getObject () de una capa cargada. De iface.showAttributeTable (layer), obtuve un error de nombre: el nombre global 'iface' no está definido. ¿Alguna sugerencia?
user25976
@dakcarto Debe importar iface con 'from qgis.utils import iface'
Mr Purple
@ user25976 La referencia a ifacesolo funciona para la consola o los scripts ejecutados desde QGIS, incluidos los complementos como Processing. Para la consola, se importa automáticamente por conveniencia, y todos los demás casos necesitan el importde qgis.utils. Esto se describe al comienzo del libro de cocina PyQGIS . No puede acceder ifaceen una aplicación independiente, ya que los módulos de Python no crean una instancia de la aplicación GUI de escritorio QGIS.
dakcarto
1
@dakcarto iface.openFeatureForm (iface.activeLayer (), feature, False) Esto es útil cuando queremos editar la función seleccionada, pero si quiero agregar una nueva función, ¿cómo puedo hacer eso? sin función
usuario99