I have several plugin functions that are using QgsProcessingLayerPostProcessorInterface to style the layer after it is created in a processing algorithm. I have largely ignored the fact that after I style it, the legend displayed in the layers panel is its old style and not the new one. I have a solution, but don't know if I am violating some thread safe rule. I know I cannot use iface in the algorithm, but is it safe to use in QgsProcessingLayerPostProcessorInterface?
In the top of my algorithm I import the following: from qgis.utils import iface In the processAlgorithm function I have the following. if context.willLoadLayerOnCompletion(dest_id): context.layerToLoadOnCompletionDetails(dest_id).setPostProcessor(StylePostProcessor.create(settings.lineColor, settings.fontColor)) return {self.PrmOutput: dest_id} My QgsProcessingLayerPostProcessorInterface looks like this. Notice the line iface.layerTreeView().refreshLayerSymbology(layer.id()) which effectively does what I need it to do. It works, but is safe or is there a better way to do this? The output layer is a polygon in which I only want the outline displayed. I am passing some color parameters from processAlgorithm. class StylePostProcessor(QgsProcessingLayerPostProcessorInterface): instance = None line_color = None font_color = None def __init__(self, line_color, font_color): self.line_color = line_color self.font_color = font_color super().__init__() def postProcessLayer(self, layer, context, feedback): if not isinstance(layer, QgsVectorLayer): return sym = layer.renderer().symbol().symbolLayer(0) sym.setBrushStyle(Qt.NoBrush) sym.setStrokeColor(self.line_color) * iface.layerTreeView().refreshLayerSymbology(layer.id <http://layer.id>())* # Hack to work around sip bug! @staticmethod def create(line_color, font_color) -> 'StylePostProcessor': """ Returns a new instance of the post processor, keeping a reference to the sip wrapper so that sip doesn't get confused with the Python subclass and call the base wrapper implementation instead... ahhh sip, you wonderful piece of sip """ StylePostProcessor.instance = StylePostProcessor(line_color, font_color) return StylePostProcessor.instance
_______________________________________________ QGIS-Developer mailing list QGIS-Developer@lists.osgeo.org List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer