I try to make a composer via python. I add item, make a composer view and open, but i can't see item in "Items" dock. Also, when i select it, i don't see item properties in "Item properties" dock.
from qgis.core import *
from qgis.utils import iface
from PyQt4.QtCore import *
from PyQt4.QtGui import *
# make a composition
mapRenderer = iface.mapCanvas().mapRenderer()
c = QgsComposition(mapRenderer)
c.setPlotStyle(QgsComposition.Print)
view = iface.createNewComposer()
# add label
lbl = QgsComposerLabel(c)
lbl.setText("test text")
lbl.setItemPosition(10,10)
lbl.adjustSizeToText()
c.addComposerLabel(lbl)
# view composer
view.setComposition(c)
How i can fix it?
UPD: I setup model for my item and now i see it in Items dock, but properties still doesn't show.... Additional code:
# find items and items prop widget
win = view.composerWindow()
items_widget = win.findChildren(QDockWidget, 'ItemsDock')[0]
items_prop_widget = win.findChildren(QDockWidget, 'ItemDock')[0]
# set items model
items_list_widget = items_widget.findChildren(QTreeView,'')[0]
items_model = c.itemsModel()
items_list_widget.setModel(items_model)
Answer
I have created a issue in the bug tracker,because is so strange.
Great job in your code,but for fix the hide values when you click on the label only need change some things. The method mapRenderer = iface.mapCanvas().mapRenderer()
is deprecated you need change for mapRenderer = iface.mapCanvas().mapSettings()
. Another change is that you need call to view.setComposition(c)
before you add a label.
the complete code.
from qgis.core import *
from qgis.utils import iface
from PyQt4.QtCore import *
from PyQt4.QtGui import *
# make a composition
mapRenderer = iface.mapCanvas().mapSettings()
c = QgsComposition(mapRenderer)
c.setPlotStyle(QgsComposition.Print)
view = iface.createNewComposer()
# view composer
view.setComposition(c)
#Fix error
view.setCurrentTool( view.AddLabel )
view.setCurrentTool( view.Select )
# add label
lbl = QgsComposerLabel(c)
lbl.setText("test text")
lbl.setItemPosition(10,10)
lbl.adjustSizeToText()
c.addComposerLabel(lbl)
# find items and items prop widget
win = view.composerWindow()
items_widget = win.findChildren(QDockWidget, 'ItemsDock')[0]
#items_prop_widget = win.findChildren(QWidget, 'ItemDock')[0]
# set items model
items_list_widget = items_widget.findChildren(QTreeView,'')[0]
items_model = c.itemsModel()
items_list_widget.setModel(items_model)
Update Code: Solved signal problem.
I'm deleted some unnecessary lines and add the signal connect.
QObject.connect( items_list_widget.selectionModel(), SIGNAL("currentChanged( QModelIndex, QModelIndex)"), c.itemsModel(),SLOT("setSelected( QModelIndex )"))
Complete code
from qgis.core import *
from qgis.utils import iface
from PyQt4.QtCore import *
from PyQt4.QtGui import *
# make a composition
mapRenderer = iface.mapCanvas().mapSettings()
c = QgsComposition(mapRenderer)
c.setPlotStyle(QgsComposition.Print)
view = iface.createNewComposer()
# view composer
view.setComposition(c)
#Add Map
rect = QgsRectangle(mapRenderer.fullExtent())
composer_map = QgsComposerMap(c, 0, 0, c.paperWidth(), c.paperHeight())
composer_map.setNewExtent(rect)
composer_map.updateItem()
c.addComposerMap(composer_map)
# add label
lbl = QgsComposerLabel(c)
lbl.setText("test text")
lbl.setItemPosition(10,10)
lbl.adjustSizeToText()
c.addComposerLabel(lbl)
# add label
lbl = QgsComposerLabel(c)
lbl.setText("other text")
lbl.setItemPosition(50,10)
lbl.adjustSizeToText()
c.addComposerLabel(lbl)
# find items and items prop widget
win = view.composerWindow()
items_widget = win.findChildren(QDockWidget, 'ItemsDock')[0]
items_widget_prop = win.findChildren(QDockWidget, 'ItemDock')[0]
items_widget_prop.show()
# set items model
items_list_widget = items_widget.findChildren(QTreeView,'')[0]
items_model = c.itemsModel()
items_list_widget.setModel(items_model)
QObject.connect( items_list_widget.selectionModel(), SIGNAL("currentChanged( QModelIndex, QModelIndex)"), c.itemsModel(),SLOT("setSelected( QModelIndex )"))
Result.
No comments:
Post a Comment