Tôi có một dự án QGIS có chứa một nhà soạn nhạc. Tất nhiên, nếu tôi đi vào GUI, tôi có thể xuất nó dưới dạng pdf, v.v. Đối với tập lệnh tạo của tôi mặc dù tôi muốn thực hiện điều này thông qua tập lệnh python. Từ đọc trực tuyến ở đây là nỗ lực của tôi:
#!/usr/bin/env python
import sys
from qgis.gui import QgsMapCanvas, QgsLayerTreeMapCanvasBridge
from PyQt4.QtCore import QFileInfo
from PyQt4.QtXml import QDomDocument
from qgis.core import *
qgs = QgsApplication(sys.argv, True)
QgsApplication.setPrefixPath("/usr", True)
qgs.initQgis()
def make_pdf():
canvas = QgsMapCanvas()
bridge = QgsLayerTreeMapCanvasBridge(
QgsProject.instance().layerTreeRoot(), canvas)
bridge.setCanvasLayers()
QgsProject.instance().read(QFileInfo('../board.qgs'))
composition = QgsComposition(canvas.mapSettings())
map_item = composition.getComposerItemById('board36x48')
map_item.setMapCanvas(canvas)
map_item.zoomToExtent(canvas.extent())
composition.refreshItems()
composition.exportAsPDF('generated/board.pdf')
QgsProject.instance().clear()
make_pdf()
Điều này không thành công, cụ thể:
i:./assets/generate_board
QGraphicsScene::addItem: item has already been added to this scene
Traceback (most recent call last):
File "./assets/generate_board", line 30, in <module>
make_pdf()
File "./assets/generate_board", line 24, in make_pdf
map_item.setMapCanvas(canvas)
AttributeError: 'NoneType' object has no attribute 'setMapCanvas'
Tôi đã dựa trên chế độ này của chế độ xem của nhà soạn nhạc Save Print / Map dưới dạng PNG / PDF bằng Python (mà không thay đổi bất cứ điều gì trong bố cục có thể nhìn thấy)? nhưng sửa đổi nó để đơn giản hóa càng nhiều càng tốt. Có vẻ như tôi đã phá vỡ một cái gì đó trong quá trình ... Tôi không có tệp mẫu này. Tôi đơn giản có một tệp dự án board.qss với bảng soạn thảo36x48. Có ý kiến gì không?
qgs = QgsApplication(sys.argv, True)
bằngapp = QtGui.QApplication(sys.argv, True)
vàqgs.initQgis()
bằngQgsApplication.initQgis()
?