3

When calling a QgsAlgorithm from within another, the result will be named after this algorithm output regardless of what is setup as the output of the main one.

For instance, taking the code from the answer to this question, although the output is set with the name 'OUTPUT' and the returned dictionary is the following:

{'OUTPUT': 'clipped_xxxxxxxxxxxxxxxxxxxxx'}

the output layer is actually named 'clipped' and I cannot seem to be able to change this.

I've tried the setName() method on the QgsVectorLayer retrieved with QgsProcessingUtils.mapLayerFromString() but to no avail.

2
0

It needs to be an actual path on your machine.

For example {'OUTPUT': '/root/data/clipped.gpkg'}

1
  • Ok but the algorithm returns a layer id, not a path – YeO Aug 8 '19 at 10:18
0

You can get the layer from the layer id:

output=processing.runAndLoadResults("qgis:intersection",params)
createdlayer=QgsProject.instance().mapLayer(output['OUTPUT'])
createdlayer.setName('My shiny new beautiful layer') 
3
  • So I'd need to run this code after having run my algorithm, right ? I'd really like to have the layer properly named by the algorithm itself rather than having to apply cosmetics afterwards. Or do I understand wrong ? – YeO Feb 28 '20 at 2:39
  • You understand right. - at least I have not found any other way of doing it - rather than even more kludgy things like searching for the layer by name. Just to be clear, the first step runs the algorithm (Which in my case is qgis:intersection), this is what I do in a plugin, it may not apply at all to what you are doing... – MortenSickel Feb 28 '20 at 4:41
  • Makes sense in the context of a plugin. With my simple algorithm script it seems I'm kind of stuck though. Thanks anyway – YeO Feb 28 '20 at 5:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.