如何从 PyQT5 窗口访问 PyQGIS 地图画布

Posted

技术标签:

【中文标题】如何从 PyQT5 窗口访问 PyQGIS 地图画布【英文标题】:How to Access PyQGS map Canvas from PyQT5 window 【发布时间】:2019-11-19 09:21:06 【问题描述】:

我正在启动 pyQgis,新手。编码知识不够。请不要因为缺少代码而忽略问题。请指导。

我正在显示 QgsMapCanvas。在主窗口的 menuBar(将 QgsMapCanvas 显示为小部件)上,在 Click 上,将打开一个 GUI(pyqt5)。 GUI 有一个 QLabel、一个 QLineEdit 和一个 QpushButton。 如何在按下 QPushButton 时访问鼠标坐标。非常感谢你

【问题讨论】:

【参考方案1】:

如果你点击按钮,地图的坐标已经消失了。 您需要使用鼠标单击地图,例如通过使用 QgsMapTool。 示例 Qgis 3.4 - 控制台:

# coding: utf-8
from PyQt5.QtWidgets import QDialog,QLabel,QHBoxLayout
from qgis.gui import QgsMapTool
from qgis.utils import iface

class CoordTool(QgsMapTool):
    def __init__(self, canvas):
        QgsMapTool.__init__(self, canvas)
        self.canvas = canvas
        self.setCursor(Qt.CrossCursor)

    def canvasReleaseEvent(self, event):
        point = self.toMapCoordinates(event.pos())
        coords = "X: "+ str(point.x()) +"/ Y: "+str( point.y())
        print(coords)

        dlg =QDialog()
        label =QLabel(coords)
        layout=QHBoxLayout()
        layout.addWidget(label)
        dlg.setLayout(layout)
        dlg.exec_()

canvas = iface.mapCanvas()
tool= CoordTool(canvas)
canvas.setMapTool(tool)

【讨论】:

以上是关于如何从 PyQT5 窗口访问 PyQGIS 地图画布的主要内容,如果未能解决你的问题,请参考以下文章

如何使用串行向我的 PyQt5 窗口添加实时(更新)图?

PyQt5:如何从系统托盘图标上下文菜单启动窗口?

PyQt5重新打开我访问过的同一目录

PyQt5如何暂时隐藏主窗口? [关闭]

PYQT5中如何将按钮点击连接的结果输出到界面上

如何正确地将 ComboBox 的模型从 python (pyQt5) 传递给 QML?