Membuka tabel atribut menggunakan PyQgis?

11

Apakah mungkin untuk membuka tabel atribut dari konsol Python atau melalui skrip Python di QGIS?

redfrex
sumber

Jawaban:

13

Ya Anda bisa, setidaknya dengan versi master terbaru dan 1.8. Ini adalah metode yang diekspos melalui iface

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

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

Anda akan memerlukan referensi yang sudah ada sebelumnya untuk QgsVectorLayer.

Untuk mengedit fitur secara langsung, ini juga merupakan metode yang diekspos melalui iface :

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

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

Anda akan membutuhkan referensi yang sudah ada sebelumnya untuk QgsVectorLayer dan QgsFeature dalam kedua kasus. Formulir fitur dibuka dan apakah itu dapat diedit tergantung pada pengaturan aplikasi dan apakah lapisan fitur dalam mode edit.

dakcarto
sumber
Contoh Python bekerja dengan baik untuk saya ketika di konsol Python. Namun, saya mencoba menjalankan skrip ini di Memproses, di mana layer = processing.getObject () dari sebuah layer yang dimuat. Dari iface.showAttributeTable (layer), saya mendapat Kesalahan Nama: nama global 'iface' tidak didefinisikan. Ada saran?
user25976
@dakcarto Anda perlu mengimpor iface dengan 'from qgis.utils import iface'
Mr Purple
@ user25976 Referensi ifacehanya berfungsi untuk konsol atau skrip dijalankan dari dalam QGIS, termasuk plugin seperti Pemrosesan. Untuk konsol, ini diimpor secara otomatis untuk kenyamanan, dengan semua kasing lain yang memerlukan importof qgis.utils. Ini dijelaskan di awal buku masak PyQGIS . Anda tidak dapat mengakses ifacedi aplikasi mandiri, karena modul Python tidak membuat instantiate aplikasi GUI desktop QGIS.
dakcarto
1
@dakcarto iface.openFeatureForm (iface.activeLayer (), fitur, False) Ini berguna ketika kita ingin mengedit fitur yang dipilih tetapi jika saya ingin menambahkan fitur baru bagaimana saya bisa melakukan itu? tanpa fitur
user99