Saltar al contenido

PyQGIS usando la capa seleccionada de un cuadro combinado

Solución:

Hay una forma recomendada de hacer esto: use el widget personalizado incorporado llamado QgsMapLayerComboBox.

Puede encontrarlo en Qt Designer bajo el QGIS custom widgets grupo.

ingrese la descripción de la imagen aquí

Una vez que abra el cuadro de diálogo en QGIS, el cuadro combinado se llenará con todas las capas en el QgsProject. QgsMapLayerComboBox ofrece métodos prácticos para filtrar dicha lista (consulte los documentos).

Cuando esté listo para leer y usar la capa seleccionada, por ejemplo, después de que los usuarios acepten el diálogo, puede acceder a la capa seleccionada de esta manera:

layer = self.dlg.mMapLayerComboBox.currentLayer()  # Real QgsMapLayer object

¡Y eso es!


Anexo: ¿Por qué falla su código?

Usando un Qt ComboBox normal, tiene varias opciones para acceder a una capa seleccionada en el cuadro combinado. La mejor forma es utilizar my_combo_box.addItem(layer_name, layer_object) En lugar de usar my_combo_box.addItems(...) para llenar el cuadro combinado.

De esta manera, puede obtener acceso directo a la capa seleccionada utilizando

layer = self.dlg.comboBox.currentData()

Puede acceder a la actual texto en tus QComboBox vía

lyr_name = my_combo.currentText()

y la capa a través de

the_layer = QgsProject.instance().mapLayersByName(lyr_name)[0]

mapLayersByName() El método devuelve una lista porque QGIS puede manejar varias capas con el mismo nombre. Por lo tanto, a menudo uso [0] porque en la mayoría de mis casos los nombres de las capas son únicos.

Referencia: https://qgis.org/api/classQgsProject.html#a935efacacb942a15afe19728233e35c3

Recomiendo la respuesta de Germán Carrillo. Estoy agregando otra forma de obtener estos widgets personalizados, por si acaso no aparece en QtDesigner, en el menú de la izquierda.

Puede utilizar un QComboBox normal en QtDesigner. Luego haga clic derecho sobre él y elija Promote to....

Luego puede agregar widgets personalizados:

Name of base class: `QComboBox`
Name of promoted class: `QgsMapLayerComboBox`
Header: `qgis.gui`
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *