Ziel ist eine bestimmte Attributtabelle

Oct 12 2020

Ich bin neu bei PyQGIS und stecke hier fest.

Deshalb habe ich eine ComboBox erstellt, damit der Benutzer auswählen kann, mit welcher Ebene er arbeiten möchte. Bisher ist alles in Ordnung. Ich habe auch alle Ebenen hinzugefügt, aber jetzt habe ich Probleme beim Filtern der Ausgabe in der 2. ComboBox.


for layer in QgsProject.instance().mapLayers().values():
    self.dlg.ComboAll.addItem(layer.name())

self.dlg.ComboAll.currentIndexChanged.connect(IndexChange)

Auf diese Weise fordere ich alle Ebenen in meiner ComboBox auf und erhalte die Information, dass der Benutzer eine andere Option ausgewählt hat.


def IndexChange():
    selectedLayer = self.dlg.ComboAll.currentIndex()
    #Prompt every fields of selectedLayer in ComboLayer

Und so erhalte ich die Nummer der ausgewählten Ebene. Aber ich weiß nicht, was ich danach tun soll. Wenn der Benutzer beispielsweise die Ebenennummer 3 wählt, möchte ich nur, dass Felder aus dieser Ebene in meiner zweiten ComboBox angezeigt werden.

Antworten

8 J.Monticolo Oct 12 2020 at 21:09

Unten ein Code mit einer einfachen QDialogmit 2 ComboBoxen (spezialisiert auf QGIS zur Anzeige von Ebenen und Feldern):

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 ( self , layerIndex: int) →QgsMapLayer

Gibt die aktuell am angegebenen Index im Kombinationsfeld angezeigte Ebene zurück.

  • Quelle : PyQGIS API-DokumentationQgsMapLayerComboBox.layer

QgsFieldComboBox

.setLayer ( self , Schicht: QgsMapLayer)

Legt die Ebene fest, für die Felder in der Combobox aufgelistet sind. Wenn keine Ebene oder eine Nicht-Vektor-Ebene festgelegt ist, ist die Combobox leer.

  • Quelle : PyQGIS API-DokumentationQgsFieldComboBox.setLayer