Ziel ist eine bestimmte Attributtabelle
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
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) →QgsMapLayerGibt 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