2016-11-07 57 views
1

我想使用QGis Map composer保存地圖及其傳說。我已經模板。AttributeError:'QgsComposition'對象沒有屬性'setMapCanvas'

這裏是python中的代碼。

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' 

回答

1

如果你看一下docs沒有對QgsComposition沒有setMapCanvas。此方法在其他幾個類中,如QgsComposerMap。因此,根據代碼getComposerItemById()您可能需要的是:

composition = newcomp.composition() 
map_item = composition.getComposerItemById('map') 
map_item.setMapCanvas(canvas) 
+0

感謝您的回答。但是在更改之後,我又收到另一個錯誤:\t AttributeError:'NoneType'對象沒有屬性'setMapCanvas'Traceback(最近調用最後一個):文件「C:/Users/craj/.qgis2/python/plugins/ JoinAttribute \ Join_Attr ibute.py「,第437行,在run map_item.setMapCanvas(canvas)中AttributeError:'NoneType'對象沒有屬性'setMapCanvas' - – Chetan