Abrindo tabela de atributos usando PyQgis?

11

É possível abrir uma tabela de atributos no console Python ou através de um script Python no QGIS?

redfrex
fonte

Respostas:

12

Sim, você pode, pelo menos com a última versão principal e 1.8. É um método exposto via iface

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

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

Você precisará de uma referência preexistente a um QgsVectorLayer.

Para edição direta de recursos, também é um método exposto via iface :

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

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

Você precisará de uma referência preexistente a um QgsVectorLayer e um QgsFeature nos dois casos. O formulário do recurso aberto e se é editável dependem das configurações do aplicativo e se a camada do recurso está no modo de edição.

dakcarto
fonte
O exemplo do Python funcionou bem para mim quando no console do Python. No entanto, tentei executar esse script no Processing, onde a layer = processing.getObject () de uma camada carregada. No iface.showAttributeTable (layer), recebi o Erro de nome: o nome global 'iface' não está definido. Alguma sugestão?
precisa saber é o seguinte
@dakcarto Você precisa importar iface com 'from qgis.utils import iface'
Mr Purple
@ user25976 A referência ifaceapenas funciona para a consola ou scripts executados a partir do QGIS, incluindo plugins como Processing. Para o console, ele é importado automaticamente por conveniência, com todos os outros casos precisando importde qgis.utils. Isso é descrito no início do livro de receitas do PyQGIS . Você não pode acessar ifaceem um aplicativo independente, pois os módulos Python não instanciam o aplicativo GUI da área de trabalho do QGIS.
Dakcarto
1
@dakcarto iface.openFeatureForm (iface.activeLayer (), recurso, False) Isso é útil quando queremos editar o recurso selecionado, mas se eu quiser adicionar um novo recurso, como posso fazer isso? sem recurso
user99