Segmente uma tabela de atributos específica
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
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) →QgsMapLayerRetorna 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