Wie verstecke / zeige ich QGisVectorLayer vor Python-Code?

11

Wie kann ich eine Ebene nach dem Erstellen ausblenden / anzeigen? Ich kann das Rendern einer bestimmten Ebene aktivieren / deaktivieren, indem ich das Kontrollkästchen über QGIS aktiviere. Dies muss jedoch programmgesteuert über Python-Code erfolgen.

Wie kann ich ein Label im Python-Code ein- / ausblenden (nicht entfernen)?

Ich suche so etwas wie:

aLayer = self.addVectorLayer(uri.uri(), layerName, self.dbConn.getProviderName())
aLayer.Hide()
....
aLayer.Show()
Heisenbug
quelle
Ich bin froh, dass Sie den Variablennamen vl(aus dem ähnlichen Codebeispiel in einer früheren Frage) in geändert haben aLayer. Es ist leicht, den Kleinbuchstaben lmit der Ziffer zu verwechseln 1.
Andytilia
@andytilia: du hast recht. Ich habe auch die alten Fragen bearbeitet.
Heisenbug

Antworten:

8

Sie können die Ebenensichtbarkeit über das Legendenobjekt steuern. Hier ist es mit Ihrem obigen Beispielcode:

aLayer = self.addVectorLayer(uri.uri(), layerName, self.dbConn.getProviderName())
legend = self.legendInterface()  # access the legend
legend.setLayerVisible(aLayer, False)  # hide the layer
# do something else
legend.setLayerVisible(aLayer, True)  # show the layer

# maybe later I want to check if the layer is visible
print legend.isLayerVisible(aLayer)

Hier ist die Dokumentation für legendInterface: http://qgis.org/api/classQgsLegendInterface.html

Viel Glück!

Andytilia
quelle