コード例 #1
0
 def nodeOrder(self, group):
     nodeorder = []
     layerTree = QgsLayerTree()
     for node in group:
         if QgsLayerTree.isGroup(node):
             groupname = node.name()
             nodeorder.append(groupname)
             for child in self.nodeOrder(node.children()):
                 nodeorder.append(groupname + '-' + child)
         elif QgsLayerTree.isLayer(node):
             nodeorder.append(node.layer().name())
     return nodeorder
コード例 #2
0
    def set_legend_compositions(self, print_layout):
        non_ident = QgsProject.instance().nonIdentifiableLayers()
        self.legend_tree_root = QgsLayerTree()
        layer_nodes = []

        for lyr in self.iface.mapCanvas().layers():
            if lyr.id() not in non_ident:
                layer_nodes.append(QgsLayerTreeLayer(lyr))

        self.legend_tree_root.insertChildNodes(-1, layer_nodes)
        # update the model
        for item in print_layout.items():
            if not isinstance(item, QgsLayoutItemLegend):
                continue
            legend_model = item.model()
            legend_model.setRootGroup(self.legend_tree_root)
コード例 #3
0
ファイル: test_qgslayertree.py プロジェクト: zyhgit/QGIS
    def testCustomLayerOrderChanged(self):
        layer = QgsVectorLayer("Point?field=fldtxt:string", "layer1", "memory")
        layer2 = QgsVectorLayer("Point?field=fldtxt:string", "layer2",
                                "memory")

        layer_tree = QgsLayerTree()
        layer_order_changed_spy = QSignalSpy(
            layer_tree.customLayerOrderChanged)
        layer1_node = QgsLayerTreeLayer(layer)
        layer_tree.addChildNode(layer1_node)
        self.assertEqual(len(layer_order_changed_spy), 1)
        layer2_node = QgsLayerTreeLayer(layer2)
        layer_tree.addChildNode(layer2_node)
        self.assertEqual(len(layer_order_changed_spy), 2)

        # simulate a layer move in the tree
        layer3_node = QgsLayerTreeLayer(layer)
        layer_tree.addChildNode(layer3_node)
        self.assertEqual(len(layer_order_changed_spy), 3)
        layer_tree.removeChildNode(layer1_node)
        self.assertEqual(len(layer_order_changed_spy), 4)
コード例 #4
0
    def with_legend_btn_run(self):

        project = QgsProject.instance()
        self.checked_layers = []
        root = project.layerTreeRoot()
        for child in root.children():
            if child.isVisible() and isinstance(child, QgsLayerTreeLayer):
                self.checked_layers.append(child.name())

            if child.isVisible() and isinstance(child, QgsLayerTreeGroup):
                self.get_group_layers(child)

        layersToAdd = [
            layer for layer in project.mapLayers().values()
            if layer.name() in sorted(self.checked_layers, reverse=False)
        ]
        layers_names_length = [
            len(layer.name()) for layer in project.mapLayers().values()
            if layer.name() in sorted(self.checked_layers, reverse=False)
        ]
        maxlen = max(layers_names_length)

        root = QgsLayerTree()
        for layer in layersToAdd:
            root.addLayer(layer)

        model = QgsLayerTreeModel(root)
        lenlen = model.rowCount()
        view = QgsLayerTreeView()
        view.setModel(model)

        view.setFixedHeight(lenlen * 20)
        view.setFixedWidth(maxlen * 10)

        legendIm = QImage(QWidget.grab(view))
        legendpath = self.plugin_dir + "\\legend.png"
        legendIm.save(legendpath)

        legendIm = Image.open(legendpath)
        #legendIm = legendIm.imageData()
        legendWidth, legendHeight = legendIm.size

        main_image = QImage(QWidget.grab(self.iface.mapCanvas()))
        mainpath = self.plugin_dir + "\\main.png"
        main_image.save(mainpath)

        main_image = Image.open(mainpath).convert("RGBA")
        width, height = main_image.size

        d = ImageDraw.Draw(main_image)
        font = ImageFont.truetype("arial.ttf", 16)
        d.text(((width / 2.5) + len(project.title()), 10),
               project.title(),
               fill='black',
               font=font)

        if abs(height - width) < 150:
            sq_fit_size = legendWidth
            height = legendHeight
        else:
            sq_fit_size = width

        if width > sq_fit_size and height > sq_fit_size:
            if width > height:
                height = int((sq_fit_size / width) * height)
                width = sq_fit_size
            else:
                width = int((sq_fit_size / height) * width)
                height = sq_fit_size
                main_image = main_image.resize((width, height))

        main_image.paste(legendIm,
                         (max(width - legendWidth, 0), height - legendHeight))
        finalpath = self.plugin_dir + "\\main.png"
        main_image.save(finalpath)

        QApplication.clipboard().setImage(QImage(finalpath))
        self.iface.messageBar().pushMessage(
            'QCopycanvas',
            'Copied map canvas to clipboard with legend',
            level=Qgis.Success,
            duration=2)