def updateLayers(self, layers): selectedLayer = self.selected and self.selected.layer or None layerSelected = False while True: taken = self.layout.takeAt(0) if taken is not None: taken.widget().deleteLater() else: break for layer in layers: layerView = LayerView(layer, self.cats) layerView.onClicked.connect(self.layerViewClicked) layerView.onDelete.connect(lambda layer=layer: self.onDeleteLayer. emit(layer)) # I love this language. self.layout.addWidget(layerView) layerView.show() if layer is selectedLayer: layerSelected = True self.setLayerSelection(layerView) if not layerSelected: self.setLayerSelection(None)