Saya tahu dimungkinkan untuk mengaitkan layer dengan UI khusus untuk mengedit atribut fitur menggunakan antarmuka QGIS. Tetapi apakah ini mungkin dengan Python?
Tautan ini menunjukkan cara mencapai hasil secara manual . Tapi saya ingin dapat membuat layer secara otomatis dan meminta mereka menggunakan custom UI tanpa harus mendefinisikan ulang file ui dan metode setiap kali.
Jawaban:
Tata letak formulir
Anda memiliki metode berikut untuk melakukan ini:
QgsVectorLayer.setEditForm ('/ path / ke / ui / file') untuk menyediakan file UI dan QgsVectorLayer.setEditFormInit ('python.Function') untuk menyediakan metode python init
Jadi memiliki QgsVectorLayer
vl
berikut ini akan melakukan apa yang Anda cariMulai dari QGIS 2.0 Anda juga akan memiliki:
QgsVectorLayer.setEditorLayout (QgsVectorLayer :: EditorLayout)
Berikan
QgsVectorLayer.GeneratedLayout
,QgsVectorLayer.TabLayout
atauQgsVectorLayer.UiFileLayout
untuk menentukan tata letak seperti apa yang Anda inginkan. Ini memungkinkan Anda menentukan desainer seret dan lepas baru (TabLayout).Tata letak widget
Pembaruan: mulai dari QGIS 2.4 akan ada metode baru ( QgsVectorLayer.setEditorWidgetV2 dan setEditorWidgetV2Config ) untuk mengubah jenis widget editor dan konfigurasinya. Metode yang dijelaskan di sini masih akan bekerja tetapi ditandai sebagai usang.
Ada sejumlah metode yang terkait dengan widget spesifik yang ingin Anda gunakan:
Gunakan QgsVectorLayer.setEditType (fieldIdx, editType) untuk menentukan tipe edit yang ingin Anda gunakan untuk widget untuk indeks bidang fieldIdx. editType adalah salah satunya .
Untuk lebih lanjut mengkonfigurasi perilaku widget gunakan metode berikut (tergantung pada opsi konfigurasi widget yang tersedia tentu saja):
sumber
setEditForm
,setEditFormInit
dansetEditorLayout
tidak usang. Hanya metode widget terkait (setEditType
,valueMap
,widgetSize
dll) kecuali untuksetFieldEditable
dansetLabelOnTop
.