def _layerTreeChanged(self): """ Re-populate layers for dropdowns dynamically when layers were added/removed. """ # First get all point layers in map canvas layer_names = [] root = self.project.layerTreeRoot() for child in root.children(): if isinstance(child, QgsLayerTreeLayer): layer = child.layer() # Handle weird project startup behaviour of QGIS (apparently # doesn't find layers on project startup and throws AttributeError) try: if layer.type( ) == QgsMapLayer.VectorLayer and layer.wkbType( ) == QgsWkbTypes.Type(1): layer_names.append(layer.name()) except AttributeError: continue comboboxes = [ self.start_layer_combo, self.end_layer_combo, self.access_layer_combo, self.matrix_start_combo, self.matrix_end_combo ] for box in comboboxes: old_text = box.currentText() box.clear() for layer in layer_names: box.addItem(layer) new_text_id = box.findText(old_text) box.setCurrentIndex(new_text_id)