Attributtabelle mit PyQgis öffnen?

11

Ist es möglich, eine Attributtabelle über die Python-Konsole oder über ein Python-Skript in QGIS zu öffnen?

Redfrex
quelle

Antworten:

12

Ja, zumindest mit der neuesten Master-Version und 1.8. Es ist eine Methode, die über iface verfügbar gemacht wird

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

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

Sie benötigen einen bereits vorhandenen Verweis auf einen QgsVectorLayer.

Für die direkte Bearbeitung von Features ist es auch eine Methode, die über iface verfügbar gemacht wird :

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

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

In beiden Fällen benötigen Sie einen bereits vorhandenen Verweis auf einen QgsVectorLayer und ein QgsFeature. Das geöffnete Feature-Formular und ob es bearbeitet werden kann, hängt von den App-Einstellungen ab und davon, ob sich der Layer des Features im Bearbeitungsmodus befindet.

Dakcarto
quelle
Das Python-Beispiel hat in der Python-Konsole gut funktioniert. Ich habe jedoch versucht, dieses Skript in Processing auszuführen, wobei die Ebene = process.getObject () einer geladenen Ebene ist. Von iface.showAttributeTable (Ebene) habe ich einen Namensfehler erhalten: Der globale Name 'iface' ist nicht definiert. Irgendwelche Vorschläge?
user25976
@dakcarto Sie müssen iface mit 'from qgis.utils import iface' importieren
Mr Purple
@ user25976 Der Verweis auf ifacefunktioniert nur für die Konsole oder Skripte, die in QGIS ausgeführt werden, einschließlich Plugins wie Processing. Für die Konsole wird sie der Einfachheit halber automatisch importiert, in allen anderen Fällen ist die importvon erforderlich qgis.utils. Dies wird am Anfang des PyQGIS-Kochbuchs beschrieben . Sie können ifacein einer eigenständigen App nicht darauf zugreifen , da die Python-Module die QGIS-Desktop-GUI-Anwendung nicht instanziieren.
Dakcarto
1
@dakcarto iface.openFeatureForm (iface.activeLayer (), feature, False) Dies ist nützlich, wenn wir das ausgewählte Feature bearbeiten möchten, aber wenn ich ein neues Feature hinzufügen möchte, wie kann ich das tun? ohne Funktion
user99