2016-11-07 55 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