I have created layer styles and wanted to create specific map themes with another script. Unfortunately, the styles are not loading properly and the map themes are faulty and sometimes not selectable. Do any of you have an idea where my error lies?
Here is the code I have used:
def Karthenthemen_Generator(Name,AbnehmerStil = None,GebaudeStil = None,KnotenStil = None,BemassungsStil = None,LeitungsStil = None,EinspeisewerkStil = None, WaermetauscherStil = None):
#Laden der Layer
Layer_Namen = {"Abnehmer": AbnehmerStil,
"Angeschlossene Gebäude":GebaudeStil,
"Knoten": KnotenStil,
"Bemaßung": BemassungsStil,
"Leitungen": LeitungsStil,
"Einspeisewerke": EinspeisewerkStil,
"Wärmetauscher": WaermetauscherStil
}
# Laden der Stile
root = QgsProject.instance().layerTreeRoot()
# laden der layer aufgrund ihres Namens
for Layer_Name, Layer_Stil in Layer_Namen.items():
Layer = QgsProject.instance().mapLayersByName(Layer_Name)
# Ausgabe, dass ein Layer nicht gefunden wurde
if not Layer:
continue
layer = Layer[0]
layer_node = root.findLayer(layer.id())
# ausschalten des Layers, wenn kein Stil angegeben ist
if Layer_Stil is None:
if layer_node:
layer_node.setItemVisibilityChecked(False)
# Laden des Layer spezifischen Stils
else:
if layer_node:
layer_node.setItemVisibilityChecked(True)
try:
layer.loadNamedStyle(Layer_Stil,True)
layer.triggerRepaint()
except Exception as e:
print(f"Fehler beim Laden des Stils '{Layer_Stil}' für Layer '{Layer_Name}': {e}")
# erstellen des Kartenthemas
Kartenthemasammlung = QgsProject.instance().mapThemeCollection()
try:
Kartenthema = QgsMapThemeCollection().createThemeFromCurrentState(
QgsProject.instance().layerTreeRoot(),
iface.layerTreeView().layerTreeModel())
QgsProject.instance().mapThemeCollection().insert(Name, Kartenthema)
print(f"map Theme '{Name}' createt and saved")
except Exception as e:
print(f"Error at map Theme '{Name}': {e}")
Kartenthemen={"Hochpunkt/Tiefpunkt":{"AbnehmerStil": None,
"GebaudeStil": None,
"KnotenStil": None,
"BemassungsStil": None,
"LeitungsStil": "Vorlauf/Rucklauf",
"EinspeisewerkStil": "Einspeisewerk",
"WaermetauscherStil": "Hochpunkt/Tiefpunkt"}, ....}
for Name, Eintrag in Kartenthemen.items():
Karthenthemen_Generator(Name,**Eintrag)