AttributeError: объект «QgsComposition» не имеет атрибута «setMapCanvas»

Я пытаюсь сохранить карту и ее легенды, используя QGis Map composer. У меня уже есть шаблон.

Вот код на питоне.

layers =iface.legendInterface().layers()
canvas=iface.mapCanvas()

for layer in layers:
# myFile = r"C:\Users\craj\Downloads\GraduatedTheme.qpt"
    myFile = r"C:\Users\craj\Downloads\GraduatedTheme.qpt"
    myTemplateFile = file(myFile, 'rt')
    myTemplateContent = myTemplateFile.read()
    myTemplateFile.close()
    myDocument = QDomDocument()
    myDocument.setContent(myTemplateContent, False)
    newcomp = iface.createNewComposer()
    newcomp.composition().loadFromTemplate(myDocument)
    newcomp.composition().refreshItems()
    for a in iface.mapCanvas().layers():
        iface.legendInterface().setLayerVisible(a, False)
    iface.legendInterface().setLayerVisible(layer, True)
    newcomp.composition().refreshItems()
    map_item = newcomp.composition()
    map_item.getComposerItemById('map')
    map_item.setMapCanvas(canvas)
    map_item.zoomToExtent(canvas.extent())
    newcomp.composition().refreshItems()
    legend_item = newcomp.composition().getComposerItemById('legend')
    legend_item.updateLegend()
    newcomp.composition().refreshItems()
    imagePath ='C:/Users/craj/Downloads/'+layer.name()+'.png'
    image = newcomp.composition().printPageAsRaster(0)
    image.save(imagePath,'png')

Произошла ошибка при выполнении кода Python:

AttributeError: 'QgsComposition' object has no attribute 'setMapCanvas' 
Traceback (most recent call last):
  File "C:/Users/craj/.qgis2/python/plugins\JoinAttribute\Join_Attribute.py", line 436, in run
map_item.setMapCanvas(canvas)
AttributeError: 'QgsComposition' object has no attribute 'setMapCanvas'

person Chetan    schedule 07.11.2016    source источник


Ответы (1)


Если вы посмотрите на документы, вы не увидите setMapCanvas на QgsComposition. Этот метод находится в нескольких других классах, таких как QgsComposerMap. Итак, основываясь на коде, вызывающем getComposerItemById(), вам, вероятно, понадобится следующее:

composition = newcomp.composition()
map_item = composition.getComposerItemById('map')
map_item.setMapCanvas(canvas)
person Oliver    schedule 07.11.2016
comment
Спасибо за ответ. Но после изменений я получил еще одну ошибку: AttributeError: объект «NoneType» не имеет атрибута «setMapCanvas» Traceback (последний последний вызов): Файл C:/Users/craj/.qgis2/python/plugins\JoinAttribute\Join_Attr‌​‌​ibute .py, строка 437, при запуске map_item.setMapCanvas(canvas) AttributeError: объект «NoneType» не имеет атрибута «setMapCanvas» — - person Chetan; 09.11.2016