PYQGISでloadNamedStyleを使用した後、フィールドの値が変更されたシンボルを分類するにはどうすればよいですか?

Dec 16 2020

まず、シンボルに描画効果(シンボロジー->レイヤーレンダリング->描画効果)を含むQMLファイルとしてレイヤーからレイヤースタイルをエクスポートしました。保存中にすべてのカテゴリをチェックしたことに注意してください(下の画像を参照)。

次に、GraduatedSymbologyを構成したフィールドの値を変更しました。次に、を使用してQMLファイルを読み込もうとしましたloadNamedStyle()。凡例とクラスは自動的に変更されませんでした。したがって、私はそれを自動的に更新するためにいくつかのことを試みました。

field = 'SPREAD'
stylepath = '/path_to_my_layer_style.qml'
layer = iface.activeLayer()
layer.loadNamedStyle(stylePath)
renderer = layer.renderer()
sym = renderer.sourceSymbol()
grad = renderer.sourceColorRamp()
renderVal = renderer.createRenderer(layer,field,5,0,sym,grad)
layer.setRenderer(renderer)

出来た。ただし、その後、そのQMLファイルの効果はなくなりました。また、これが最善の方法だとは思いません。QMLファイルをPYQGISに読み込んだ後、シンボルを新しい値で分類するためのより便利な方法はありますか?

回答

1 meteergen Dec 16 2020 at 18:37

わかりました、私は解決策を見つけました。これが私がした方法です、

layer.loadNamedStyle(stylePath)
renderer = layer.renderer()

renderer.updateClasses(layer,0,5) # Update the QgsGraduatedSymbologyRenderer.mode and set the classes up to 5
renderer.updateRangeLabels() # Update label range
renderer.updateColorRamp() # Update the color ramp
iface.layerTreeView().refreshLayerSymbology(layer.id()) # Refresh legend on the interface
layer.reload() 

このようにして、決定されたパラメータを再度分類するために記号がトリガーされ、記号の効果も消えません。