Apuntar a una tabla de atributos específica

Oct 12 2020

Soy nuevo en PyQGIS y estoy atrapado aquí.

Así que he creado un ComboBox para que el usuario pueda seleccionar con qué capa quiere trabajar. Todo va bien hasta ahora. También agregué todas las capas, pero ahora tengo problemas para filtrar la salida en el segundo ComboBox.


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

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

Así es como solicito todas las capas en mi ComboBox y obtengo la información de que el usuario ha elegido otra opción.


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

Y así es como obtengo el número de la capa seleccionada. Pero no sé qué hacer después de eso. Por ejemplo, si el usuario elige la capa número 3, solo quiero que los campos de esta capa aparezcan en mi segundo ComboBox.

Respuestas

8 J.Monticolo Oct 12 2020 at 21:09

A continuación, un código con un simple QDialogcon 2 comboBoxes (especializado para que QGIS muestre capas y 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

Devuelve la capa que se muestra actualmente en el índice especificado dentro del cuadro combinado.

  • fuente : Documentación de la API de PyQGISQgsMapLayerComboBox.layer

QgsFieldComboBox

.setLayer ( auto , capa: QgsMapLayer)

Establece la capa para la que se enumeran los campos en el cuadro combinado. Si no se establece ninguna capa o se establece una capa no vectorial, el cuadro combinado estará vacío.

  • fuente : Documentación de la API de PyQGISQgsFieldComboBox.setLayer