Targetkan tabel atribut tertentu
Saya baru mengenal PyQGIS dan saya terjebak di sini.
Jadi saya telah membuat ComboBox sehingga pengguna dapat memilih layer mana yang ingin dia gunakan. Semuanya baik-baik saja sejauh ini. Saya juga telah menambahkan semua lapisan tetapi sekarang saya mengalami masalah untuk memfilter output di ComboBox ke-2.
for layer in QgsProject.instance().mapLayers().values():
self.dlg.ComboAll.addItem(layer.name())
self.dlg.ComboAll.currentIndexChanged.connect(IndexChange)
Jadi ini adalah bagaimana saya meminta semua lapisan dalam Kotak Kombo saya dan mendapatkan informasi bahwa pengguna telah memilih opsi lain.
def IndexChange():
selectedLayer = self.dlg.ComboAll.currentIndex()
#Prompt every fields of selectedLayer in ComboLayer
Dan inilah cara saya mendapatkan nomor dari lapisan yang dipilih. Tapi saya tidak tahu harus berbuat apa setelah itu. Misalnya, jika pengguna memilih lapisan nomor 3 saya hanya ingin bidang dari lapisan ini muncul di ComboBox kedua saya.
Jawaban
Di bawah kode sederhana QDialogdengan 2 comboBoxes (khusus untuk QGIS untuk menampilkan layer dan field):
class MyDialog(QDialog):
def __init__(self, parent=None):
super(MyDialog, self).__init__(parent)
self._combo_lyr = QgsMapLayerComboBox(self)
self._combo_fld = QgsFieldComboBox(self)
self.layout = QVBoxLayout()
self.setLayout(self.layout)
self.layout.addWidget(self._combo_lyr)
self.layout.addWidget(self._combo_fld)
# init fields data
self.IndexChanged(0)
# signals
self._combo_lyr.currentIndexChanged.connect(self.IndexChanged)
def IndexChanged(self, index):
# see help(QgsMapLayerComboBox.layer)
selected_layer = self._combo_lyr.layer(index)
# see help(QgsMapLayerComboBox.layer)
self._combo_fld.setLayer(selected_layer)
self._combo_fld.setCurrentIndex(0)
md = MyDialog()
md.show()
QgsMapLayerComboBox
.layer ( diri ,
layerIndex: int) →QgsMapLayerMengembalikan lapisan yang saat ini ditampilkan pada indeks yang ditentukan dalam kotak kombo.
- sumber : Dokumentasi API PyQGISQgsMapLayerComboBox.layer
QgsFieldComboBox
.setLayer ( diri , lapisan:
QgsMapLayer)Menyetel lapisan yang bidangnya terdaftar di kotak kombo. Jika tidak ada lapisan yang disetel atau lapisan non-vektor disetel maka kotak kombo akan kosong.
- sumber : Dokumentasi API PyQGISQgsFieldComboBox.setLayer