Estoy escribiendo un plugin, quiero cambiar el contenido de un comboBox (campos) dependiendo del contenido de otro comboBox (capas).
Mi plugin es un dockwidget. Puedo rellenar los campos comboBox simplemente iniciando el plugin en el def run(self): y funciona bien:
layerNom = self.dockwidget.comboBoxErrores.currentText()#Get the text value of the comboBox
for lyr in QgsMapLayerRegistry.instance().mapLayers().values(): #Get layers
if lyr.name()==str(layerNom):
fields = lyr.pendingFields() #Get Fiels
field_names = [field.name() for field in fields] #Field List
self.dockwidget.comboCampos.addItems(field_names) #Added to the comboBox
Pero cuando intento actualizar el contenido de los campos comboBox realmente no sé cómo hacerlo.
En mi archivo "pluginName_dockwidget.py", en la sección init he creado la conexión con la función que repoblará el comboBox con el nuevo contenido:
self.comboBoxErrores.currentIndexChanged['QString'].connect(self.pueblaCampos)
En el mismo archivo tengo una función que obtiene el valor del nombre de la capa del comboBox y lo emite con la señal creada anteriormente:
sennalComboIndex = pyqtSignal(str)
.
.
.
def pueblaCampos(self):
layerName = self.comboBoxErrores.currentText()
self.sennalComboIndex.emit(layerName)
En mi archivo principal, tengo el resto de la función:
def pueblaCampos(self, layerName):
for lyr in QgsMapLayerRegistry.instance().mapLayers().values():
if lyr.name()==str(layerName):
fields = lyr.pendingFields()
field_names = [field.name() for field in fields]
self.dockwidget.comboCampos.clear()
self.dockwidget.comboCampos.addItems(field_names)
Cuando cambio el elemento seleccionado en el comboBox de capas, no ocurre nada. ¿Qué me falta?