Saya memiliki beberapa lapisan dengan simbol yang didefinisikan data yang sangat kompleks. Jika saya menggunakan legenda di komposer cetak, simbol-simbol ini tidak digambar dengan benar.
Apakah ada cara untuk mengubah simbol legenda dengan pyqgis, jadi saya dapat menggunakan gambar PNG atau SVG khusus sebagai ganti simbol legenda default untuk lapisan ini?
Saya tahu cara menambahkan Tombol ke komposer Cetak dan bagaimana menghubungkannya dengan suatu fungsi. Saya ingin menambahkan tombol ke Legenda-Pengaturan untuk memungkinkan saya mengganti ikon legenda yang dibuat secara otomatis dengan gambar khusus. Jadi yang masih saya butuhkan adalah informasi tentang bagaimana saya dapat mengakses legenda-simbol dengan pyqgis / pyqt, dan bagaimana cara menggantinya dengan QImage pada QLabel atau sesuatu seperti itu?
Maket tombol yang sangat mendasar yang digunakan untuk mengubah simbol:
Legenda yang dihasilkan secara otomatis:
Legenda dengan simbol legenda kustom:
Saya sudah menemukan cara mengakses item legenda di komposer cetak tetapi belum cara mengakses simbol itu sendiri:
import qgis
from PyQt4.QtCore import *
from PyQt4.QtGui import *
activeComposer = iface.activeComposers()
for item in activeComposer:
if item.composerWindow().windowTitle()=='test':
for i in item.items():
if isinstance(i,QgsComposerLegend):
#print i
#print i.model()
legend = i
for i in xrange(legend.modelV2().rowCount()):
posteleg=legend.modelV2().index(i, 0)
print posteleg.data()
Edit 1:
Saya juga menemukan cara Mengakses QIcon-Objects dari pohon-legenda tetapi belum dapat menukarnya:
def run(self):
activeComposer = self.iface.activeComposers()
#print(self.resolve('icon.png'))
for item in activeComposer:
if item.composerWindow().windowTitle()=='test':
for i in item.items():
if isinstance(i,QgsComposerLegend):
legend = i
layerIcon = QIcon(os.path.join(os.path.dirname(__file__), "icon.png"))
for i in xrange(legend.modelV2().rowCount()):
posteleg=legend.modelV2().index(i, 0)
posteleg.model().iconGroup().swap(layerIcon)
print posteleg.data()
Berikut adalah satu contoh kehidupan nyata di mana Anda dapat melihat simbologi yang dikombinasikan dari banyak lapisan simbol: Ini akan berakhir dalam legenda seperti ini:
Karena saya membutuhkan simbol yang tepat dalam legenda, saya ingin membuat tangkapan layar simbol saya, memotongnya dan menggunakannya sebagai gambar dalam legenda saya.
Saya tahu saya hanya bisa overlay gambar terpisah di atas legenda saya yang mencakup simbol yang dibuat secara otomatis tetapi saya ingin memiliki solusi "bersih" yang memungkinkan saya untuk mengganti simbol dalam legenda dengan gambar khusus.
Edit 2:
Sementara itu saya telah menemukan cara lain untuk mendapatkan akses ke entri legenda:
from qgis.core import QgsLegendRenderer, QgsComposerLegendStyle
compDict = {}
for comp in iface.activeComposers():
# workaround to get name: read it from window title
compDict[comp.composerWindow().windowTitle()] = comp.composition()
if "mycomposername" in compDict:
itemLlegend = compDict["mycomposername"].getComposerItemById("mylegend_id")
if itemLlegend:
print itemLlegend
tree_layer_layer = itemLlegend.modelV2().rootGroup().children()
for item in tree_layer_layer:
if item.layerName()=="MyLayername":
print "match"
QgsLegendRenderer.setNodeLegendStyle(item, QgsComposerLegendStyle.Group)
Ini memungkinkan saya untuk mengakses objek QgsLayerTreeLayer dan saya bisa mengganti Style legenda (Grup, Subkelompok, Tersembunyi). Tapi saya masih belum tahu bagaimana mengakses simbol-legenda. Ada ide?