PYQGIS——图层管理器
PYQGIS——图层管理器界面设计写代码程序入口if __name__ == '__main__':# 应用入口,使用GUIqgs = QgsApplication([], True)# 设置,qgis安装路径,这里写相对路径,如果是源码运行,这行可不写qgs.setPrefixPath('qgis', True)# 初始化qg...
·
PYQGIS——图层管理器
界面设计

写代码
程序入口
if __name__ == '__main__':
# 应用入口,使用GUI
qgs = QgsApplication([], True)
# 设置,qgis安装路径,这里写相对路径,如果是源码运行,这行可不写
qgs.setPrefixPath('qgis', True)
# 初始化
qgs.initQgis()
window = Window()
window.show()
exit_code = qgs.exec_()
# 退出
qgs.exitQgis()
建立桥梁
model = QgsLayerTreeModel(QgsProject.instance().layerTreeRoot(), self)
model.setFlag(QgsLayerTreeModel.AllowNodeRename)
model.setFlag(QgsLayerTreeModel.AllowNodeReorder)
model.setFlag(QgsLayerTreeModel.AllowNodeChangeVisibility)
model.setFlag(QgsLayerTreeModel.ShowLegendAsTree)
model.setAutoCollapseLegendNodes(10)
self.layer_tree_view.setModel(model)
# 注意self.layer_tree_bridge必须有
self.layer_tree_bridge = QgsLayerTreeMapCanvasBridge(QgsProject.instance().layerTreeRoot(), self.map_canvas)
加载图层
data_file, ext = QFileDialog.getOpenFileName(self, '打开', '', '*.shp')
if data_file:
basename = os.path.splitext(os.path.basename(data_file))[0]
layer = QgsVectorLayer(data_file, basename, "ogr")
QgsProject.instance().addMapLayer(layer)
self.layer_list.append(layer)
self.map_canvas.setExtent(layer.extent())
self.map_canvas.setLayers(self.layer_list)
self.map_canvas.refresh()
self.layer_tree_view.setCurrentLayer(layer)
运行效果

源码
import os
from PyQt5.QtWidgets import QMainWindow, QFileDialog, QVBoxLayout, QHBoxLayout
from qgis.gui import QgsLayerTreeMapCanvasBridge, QgsLayerTreeView, QgsMapCanvas
from qgis.core import QgsVectorLayer, QgsProject, QgsLayerTreeModel, QgsApplication
from main_ui import Ui_MainWindow
class Window(QMainWindow, Ui_MainWindow):
def __init__(self):
super(Window, self).__init__()
self.setupUi(self)
self.layers = []
# ---------初始化图层和画布----------
self.vl = QVBoxLayout(self.dockWidgetContents)
self.layer_tree_view = QgsLayerTreeView(self)
self.vl.addWidget(self.layer_tree_view)
self.hl = QHBoxLayout(self.frame)
self.map_canvas = QgsMapCanvas(self.frame)
self.hl.addWidget(self.map_canvas)
# ---------初始化图层和画布----------
self.action_open.triggered.connect(self.action_open_triggered)
# 建立桥梁
self.model = QgsLayerTreeModel(QgsProject.instance().layerTreeRoot(), self)
self.model.setFlag(QgsLayerTreeModel.AllowNodeRename)
self.model.setFlag(QgsLayerTreeModel.AllowNodeReorder)
self.model.setFlag(QgsLayerTreeModel.AllowNodeChangeVisibility)
self.model.setFlag(QgsLayerTreeModel.ShowLegendAsTree)
self.model.setAutoCollapseLegendNodes(10)
self.layer_tree_view.setModel(self.model)
# 注意self.layer_tree_bridge必须有
self.layer_tree_bridge = QgsLayerTreeMapCanvasBridge(QgsProject.instance().layerTreeRoot(), self.map_canvas)
def action_open_triggered(self):
data_file, ext = QFileDialog.getOpenFileName(self, '打开', '', '所有文件(*)')
if data_file:
if data_file.endswith('.shp'):
basename = os.path.splitext(os.path.basename(data_file))[0]
layer = QgsVectorLayer(data_file, basename, "ogr")
QgsProject.instance().addMapLayer(layer)
self.layers.append(layer)
self.map_canvas.setExtent(layer.extent())
self.map_canvas.setLayers(self.layers)
self.map_canvas.refresh()
self.layer_tree_view.setCurrentLayer(layer)
elif data_file.endswith('.qgz') or data_file.endswith('.qgs'):
QgsProject.instance().read(data_file)
else:
print('error')
if __name__ == '__main__':
# 应用入口,使用GUI
qgs = QgsApplication([], True)
# 设置,qgis安装路径,这里写相对路径,如果是源码运行,这行可不写
qgs.setPrefixPath('qgis', True)
# 初始化
qgs.initQgis()
window = Window()
window.show()
exit_code = qgs.exec_()
# 退出
qgs.exitQgis()
更多推荐




所有评论(0)