Skip to content

Instantly share code, notes, and snippets.

@wonder-sk
Created August 22, 2014 08:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save wonder-sk/211b7130b58e50d78e6d to your computer and use it in GitHub Desktop.
Save wonder-sk/211b7130b58e50d78e6d to your computer and use it in GitHub Desktop.
Simple legend dock widget
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
class LegendView(QLabel):
def __init__(self, root, parent=None):
QLabel.__init__(self, parent)
self.root = root
self.model = QgsLayerTreeModel(self.root)
self.settings = QgsLegendSettings()
self.settings.setTitle("")
self.model.rowsInserted.connect(self.refreshLegend)
self.model.rowsRemoved.connect(self.refreshLegend)
self.model.dataChanged.connect(self.refreshLegend)
self.refreshLegend()
def refreshLegend(self):
r = QgsLegendRenderer(self.model, self.settings)
size = r.minimumSize()
dpi = 96
dpmm = dpi / 25.4
s = QSize(size.width() * dpmm, size.height() * dpmm)
img = QImage(s, QImage.Format_ARGB32_Premultiplied)
img.fill(Qt.transparent)
painter = QPainter(img)
painter.scale(dpmm, dpmm)
r.drawLegend(painter)
painter.end()
self.setPixmap( QPixmap.fromImage(img) )
def add_legend_dock(iface):
dw = QDockWidget("Legend")
dw.setWidget(LegendView(QgsProject.instance().layerTreeRoot()))
iface.addDockWidget(Qt.LeftDockWidgetArea, dw)
return dw
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment