<div dir="ltr">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:<div><br></div><div><span style="font-family:monospace">if (is_layer_visible( 'toggle_layer_name' ), 1, 0)</span></div><div><br></div><div></div><div>Invert it to only display the labels when a certain layer is <i>not</i> visible by simply switching the true/ false statement order, e.g. <span style="font-family:monospace">if (is_layer_visible( 'toggle_layer_name' ),false,true)</span><br></div><div></div><div><br></div><div>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 <span style="font-family:monospace">if (is_layer_visible( 'toggle_layer_name' ),{expression when true}, false)</span></div><div><br></div><div>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:</div><div><br></div><div><span style="font-family:monospace"><span>def</span> redrawWhenToggled(layerTreeNode):<br>    canvas = iface.mapCanvas()<br>    canvas.redrawAllLayers()<br><br></span></div><div><span style="font-family:monospace">toggle_layer = QgsProject.instance().layerTreeRoot().findLayer('toggle_layer_name_76f7c585_xxxxx')<br>toggle_layer.visibilityChanged.connect(redrawWhenToggled)</span><br></div><div><br></div><div>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 <span style="font-family:monospace">iface.activeLayer().id()</span> in the python console.</div><div><br></div><div>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.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 13 Apr 2021 at 23:27, Springfield Harrison <<a href="mailto:stellargps@gmail.com" target="_blank">stellargps@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    <p>Hello Folks, back again!<br>
    </p>
    <p>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?).</p>
    Under the Rendering tab for labels I find:
    <p><i><span style="color:rgb(64,64,64);font-family:Lato,proxima-nova,"Helvetica Neue",Arial,sans-serif;font-size:16px;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(252,252,252);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">With data-defined expressions in<span> </span></span></i><i><span style="box-sizing:border-box;border:1px solid rgb(127,187,227);background:none 0% 0% repeat scroll rgb(127,187,227);font-size:12.8px;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px;color:rgb(64,64,64);font-family:Lato,proxima-nova,"Helvetica Neue",Arial,sans-serif;font-variant-ligatures:normal;font-variant-caps:normal;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">Show label</span></i><i><span style="color:rgb(64,64,64);font-family:Lato,proxima-nova,"Helvetica Neue",Arial,sans-serif;font-size:16px;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(252,252,252);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> </span>and<span> </span></span></i><i><span style="box-sizing:border-box;border:1px solid rgb(127,187,227);background:none 0% 0% repeat scroll rgb(127,187,227);font-size:12.8px;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px;color:rgb(64,64,64);font-family:Lato,proxima-nova,"Helvetica Neue",Arial,sans-serif;font-variant-ligatures:normal;font-variant-caps:normal;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration-style:initial;text-decoration-color:initial">Always Show</span></i><i><span style="color:rgb(64,64,64);font-family:Lato,proxima-nova,"Helvetica Neue",Arial,sans-serif;font-size:16px;font-variant-ligatures:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:left;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;background-color:rgb(252,252,252);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><span> </span>you can fine tune which labels
          should be rendered.</span></i></p>
    <p>but there is no explanation of how to implement this feature.</p>
    <p>I would expect that something like this may be in the right
      direction: <br>
    </p>
    <p><i>if (is_layer_visible( @layer_name ) = 0,  ("Tree_Tag"  ||  ' -
        ' || ' (' ||   "More"   || ') ') , '*')</i><br>
    </p>
    <p>Any thoughts on how to selectively make labels visible would be
      great.<br>
    </p>
    <pre cols="72">-----
Cheers, Spring</pre>
    <div><br>
    </div>
    <br>
    <blockquote type="cite">
    </blockquote>
  </div>

_______________________________________________<br>
Qgis-user mailing list<br>
<a href="mailto:Qgis-user@lists.osgeo.org" target="_blank">Qgis-user@lists.osgeo.org</a><br>
List info: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-user" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/qgis-user</a><br>
Unsubscribe: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-user" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/qgis-user</a><br>
</blockquote></div>