Targetkan tabel atribut tertentu

Oct 12 2020

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

8 J.Monticolo Oct 12 2020 at 21:09

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) →QgsMapLayer

Mengembalikan 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