Tôi có một số lớp với các ký hiệu được xác định dữ liệu rất phức tạp. Nếu tôi sử dụng một chú giải trong trình soạn thảo in, các ký hiệu này không được vẽ chính xác.
Có cách nào để thay đổi biểu tượng chú giải bằng pyqgis, vì vậy tôi có thể sử dụng hình ảnh PNG hoặc SVG tùy chỉnh thay vì biểu tượng chú giải mặc định cho các lớp này không?
Tôi biết cách thêm Nút ấn vào trình soạn thảo In và cách kết nối nó với một chức năng. Tôi muốn thêm một nút vào Cài đặt chú thích để cho phép tôi thay thế biểu tượng chú giải được tạo tự động bằng hình ảnh tùy chỉnh. Vì vậy, những gì tôi vẫn cần là thông tin về cách tôi có thể truy cập các biểu tượng huyền thoại bằng pyqgis / pyqt, và làm thế nào để thay thế chúng bằng QImage trên QLabel hoặc một cái gì đó tương tự?
Mockup rất cơ bản của nút được sử dụng để thay đổi biểu tượng:
Truyền thuyết được tạo tự động:
Truyền thuyết với biểu tượng truyền thuyết tùy chỉnh:
Tôi đã tìm ra cách truy cập các mục của chú giải trong trình soạn thảo in nhưng chưa biết cách truy cập vào biểu tượng:
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()
Chỉnh sửa 1:
Tôi cũng đã tìm ra cách truy cập QIcon-Object của cây huyền thoại nhưng chưa thể trao đổi chúng:
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()
Đây là một ví dụ thực tế trong đó bạn có thể thấy một biểu tượng kết hợp của nhiều lớp biểu tượng: Điều này sẽ kết thúc trong truyền thuyết như thế này:
Khi tôi cần biểu tượng thích hợp trong truyền thuyết, tôi muốn tạo một ảnh chụp màn hình biểu tượng của mình, cắt nó và sử dụng nó như một hình ảnh trong truyền thuyết của tôi.
Tôi biết tôi chỉ có thể phủ một hình ảnh riêng biệt lên trên chú giải của mình bao gồm biểu tượng được tạo tự động nhưng tôi muốn có một giải pháp "sạch hơn" cho phép tôi thay thế các biểu tượng trong truyền thuyết bằng hình ảnh tùy chỉnh.
Chỉnh sửa 2:
Trong khi đó, tôi đã tìm thấy một cách khác để có quyền truy cập vào các mục huyền thoại:
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)
Điều này cho phép tôi truy cập các đối tượng QssLayerTreeLayer và tôi có thể chuyển đổi Phong cách huyền thoại (Nhóm, Nhóm phụ, Ẩn). Nhưng tôi vẫn không biết làm thế nào để truy cập vào biểu tượng huyền thoại. Có ý kiến gì không?