Segmente uma tabela de atributos específica

Oct 12 2020

Sou novo no PyQGIS e estou preso aqui.

Portanto, criei uma ComboBox para que o usuário possa selecionar com qual camada deseja trabalhar. Tudo está bem até agora. Também adicionei todas as camadas, mas agora estou tendo problemas para filtrar a saída na 2ª ComboBox.


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

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

Portanto, é assim que solicito todas as camadas da minha ComboBox e obtenho a informação de que o usuário escolheu outra opção.


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

E é assim que obtenho o número da camada selecionada. Mas não sei o que fazer depois disso. Por exemplo, se o usuário escolher a camada número 3, quero apenas os campos dessa camada aparecendo na minha segunda ComboBox.

Respostas

8 J.Monticolo Oct 12 2020 at 21:09

Abaixo um código com um simples QDialogcom 2 comboBoxes (especializado para QGIS para exibir camadas e campos):

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

Retorna a camada atualmente exibida no índice especificado na caixa de combinação.

  • fonte : Documentação da API PyQGISQgsMapLayerComboBox.layer

QgsFieldComboBox

.setLayer ( auto , camada: QgsMapLayer)

Define a camada para a qual os campos são listados na combobox. Se nenhuma camada for definida ou uma camada não vetorial for definida, a caixa de combinação estará vazia.

  • fonte : Documentação da API PyQGISQgsFieldComboBox.setLayer