Как скрыть / показать QGisVectorLayer из кода Python?

11

Как только я создал слой, как я могу его скрыть / показать? Я могу включить / отключить рендеринг определенного слоя, установив флажок через QGIS, но мне нужно сделать это программно из кода Python.

Как я могу показать / скрыть (не удалить) метку из кода Python?

Я ищу что-то вроде:

aLayer = self.addVectorLayer(uri.uri(), layerName, self.dbConn.getProviderName())
aLayer.Hide()
....
aLayer.Show()
гейзенбаг
источник
Я рад, что вы изменили имя переменной vl(из аналогичного примера кода в предыдущем вопросе) на aLayer. Легко спутать строчную букву lс цифрой 1.
andytilia
@andytilia: ты прав. Я также редактировал старые вопросы.
Heisenbug

Ответы:

8

Вы можете управлять видимостью слоя через объект легенды. Вот ваш пример кода выше:

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)

Вот документация для legendInterface: http://qgis.org/api/classQgsLegendInterface.html

Удачи!

andytilia
источник