Charles, thanks very much.  This looks promising.

I'm out all  day but will check it later and advise . . . . .

-----
Cheers, Spring



On 14/Apr/2021 07:34, Charles Dixon-Paver wrote:
If you want the layer dependant label visibility to be applied to the entire layer, then indeed using an expression in the "Show label" rendering option should do what you are asking. By the sounds of things though, you should probably just be using a simple expression like:

if (is_layer_visible( 'toggle_layer_name' ), 1, 0)

Invert it to only display the labels when a certain layer is /not/ visible by simply switching the true/ false statement order, e.g. if (is_layer_visible( 'toggle_layer_name' ),false,true)

If you are wanting the behaviour to be applied to a specific rule you can specify a similar context within the rule using an expression like if (is_layer_visible( 'toggle_layer_name' ),{expression when true}, false)

Note, however, that although the map canvas will automatically toggle the display of the visible layers, it probably isn't going to automatically update the label rendering... So even with these expressions working properly you may have to refresh the map or pan a little to check that it's working after changing the layer visibility. As I'm sure you can imagine, labeling can be quite a computationally expensive resource so there are likely very good reasons for this behaviour, although you can probably work around it using some python code or similar. An example might be the following:

def redrawWhenToggled(layerTreeNode):
    canvas = iface.mapCanvas()
    canvas.redrawAllLayers()

toggle_layer = QgsProject.instance().layerTreeRoot().findLayer('toggle_layer_name_76f7c585_xxxxx')
toggle_layer.visibilityChanged.connect(redrawWhenToggled)

That should redraw the canvas each time you toggle the visibility on that particular layer. Note that 'toggle_layer_name_76f7c585_xxxxx' is of course the layerID. You can easily get the layer id by selecting/ highlighting the item in the layers tab and using iface.activeLayer().id() in the python console.

I would probably also use a layer id, rather than a name, in the "is_layer_visible" expression, so that the expression continues to work even when a layer is renamed or duplicated etc.

On Tue, 13 Apr 2021 at 23:27, Springfield Harrison <stellar...@gmail.com <mailto:stellar...@gmail.com>> wrote:

    Hello Folks, back again!

    I'm trying to have labels display only when that "layer" is turned
    on (visible).  BUT my layers are actually rule based symbology and
    apply only to selected records in the layer (as per the rules),
    (sub-layers?).

    Under the Rendering tab for labels I find:

    /With data-defined expressions in//Show label//and//Always
    Show//you can fine tune which labels should be rendered./

    but there is no explanation of how to implement this feature.

    I would expect that something like this may be in the right
    direction:

    /if (is_layer_visible( @layer_name ) = 0,  ("Tree_Tag" ||  ' - '
    || ' (' ||   "More"   || ') ') , '*')/

    Any thoughts on how to selectively make labels visible would be great.

    -----
    Cheers, Spring



    _______________________________________________
    Qgis-user mailing list
    Qgis-user@lists.osgeo.org <mailto:Qgis-user@lists.osgeo.org>
    List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
    Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user

_______________________________________________
Qgis-user mailing list
Qgis-user@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user

Reply via email to