python实现卷帘功能_让我们开发一个非常好用的卷帘工具

本文介绍了一款使用Python和QGIS开发的卷帘工具,该工具允许用户通过选择图层并在地图上拖动来比较不同图层。用户可以通过点击按钮显示下拉框选择图层,并在地图上通过鼠标操作进行卷帘操作,以查看不同图层的对比效果。卷帘工具支持垂直和水平方向的分隔线,提供了便捷的地图对比体验。
摘要由CSDN通过智能技术生成

版权声明:未经作者允许不得转载,此插件不得用于商业用途。

目录

开发环境

QGIS 3.2

python(QGIS自带)

插件开发

__init__.py

from .map_swipe_plugin import MapSwipePlugin

def classFactory(iface):

return MapSwipePlugin(iface)

map_swipe_plugin.py

import os

from PyQt5.QtGui import QIcon

from PyQt5.QtWidgets import QWidget, QHBoxLayout, QComboBox, QPushButton

from qgis.core import QgsProject

from qgis.gui import QgsMapToolPan

from .map_swipe_tool import MapSwipeTool

plugin_path = os.path.dirname(__file__)

class MapSwipePlugin:

def __init__(self, iface):

self.iface = iface

self.canvas = iface.mapCanvas()

# 图层变化信号

QgsProject.instance().layerTreeRoot().layerOrderChanged.connect(self.combobox_add_items)

def initGui(self):

self.menu = self.title = "卷帘工具"

self._create_widget()

self.tool = MapSwipeTool(plugin_path, self.combobox, self.iface)

self.tool.deactivated.connect(self.tool_deactivated)

self.widget_action = self.iface.addToolBarWidget(self.widget)

def unload(self):

self.canvas.setMapTool(QgsMapToolPan(self.iface.mapCanvas()))

self.iface.removeToolBarIcon(self.widget_action)

del self.widget_action

def run(self):

if self.canvas.mapTool() != self.tool:

self.prevTool = self.canvas.mapTool()

self.canvas.setMapTool(self.tool)

else:

self.canvas.setMapTool(self.prevTool)

if self.pushbutton.isChecked() and self.combobox.isHidden():

self.combobox.show()

self.combobox_add_items()

else:

self.combobox.hide()

def _create_widget(self):

icon = QIcon(os.path.join(plugin_path, 'icon.png'))

# 新建widget

self.widget = QWidget(self.iface.mainWindow())

self.hlayout = QHBoxLayout(self.widget)

self.hlayout.setContentsMargins(0, 0, 0, 0)

self.pushbutton = QPushButton(icon, '', self.widget)

self.pushbutton.setCheckable(True)

self.pushbutton.setFlat(True)

self.combobox = QComboBox(self.widget)

self.hlayout.addWidget(self.pushbutton)

self.hlayout.addWidget(self.combobox)

self.combobox.hide()

self.combobox_add_items()

self.pushbutton.clicked.connect(self.run)

def combobox_add_items(self):

self.combobox.clear()

layers = QgsProject.instance().layerTreeRoot().layerOrder()

self.combobox.addItems([layer.name() for layer in layers])

def tool_deactiv

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值