Apuntar a una tabla de atributos específica
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
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) →QgsMapLayerDevuelve 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