You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

QGIS Python脚本需求:添加地图图层未打开时的错误判断逻辑

嘿,这就帮你把脚本调整好啦!我添加了图层检查的逻辑,确保只有当QGIS里已经打开地图图层时才会弹出坐标输入对话框;如果没有打开任何图层,就直接在消息栏显示错误提示,不会触发输入框。另外还优化了坐标输入的错误处理,避免用户输入格式不对时脚本报错。

调整后的QGIS Python脚本
from qgis.PyQt.QtWidgets import QInputDialog, QMessageBox, QLineEdit
from qgis.core import QgsProject, QgsRectangle, QgsPoint
from qgis.gui import QgsMessageBar

# 检查是否有已打开的地图图层
if not QgsProject.instance().mapLayers():
    # 无图层时显示错误提示
    iface.messageBar().pushMessage("Error", "I'm sorry but you must open a map layer in order to fill in the Dialog Box", level=QgsMessageBar.CRITICAL)
else:
    qid = QInputDialog()
    canvas = iface.mapCanvas()
    # 弹出坐标输入对话框
    input, ok = QInputDialog.getText(qid, "Enter Coordinates", "Enter Coordinates (X,Y)", QLineEdit.Normal, "X,Y")
    
    if ok:
        try:
            # 分割并转换坐标为浮点数
            x_str, y_str = input.split(",")
            x = float(x_str.strip())
            y = float(y_str.strip())
            
            # 设置画布可视范围,scale控制范围大小
            scale = 225
            rect = QgsRectangle(x - scale, y - scale, x + scale, y + scale)
            canvas.setExtent(rect)
            canvas.refresh()
            print(f"{x},{y}")
        except (IndexError, ValueError):
            # 处理输入格式错误
            iface.messageBar().pushMessage("Warning", "Invalid coordinate format! Please enter as X,Y (e.g. 123.45,67.89)", level=QgsMessageBar.WARNING)
    else:
        # 用户取消输入时的提示
        QMessageBox.information(None, "Info", "User Cancelled!")

主要修改说明:

  • 图层存在性检查:通过QgsProject.instance().mapLayers()判断当前项目是否加载了图层,为空则直接显示错误消息,不触发输入对话框
  • 增强错误处理:替换原有的isnumeric()判断(无法识别浮点数),改用try-except捕获输入格式错误,给用户清晰的格式提示
  • 保持原有核心功能:保留了坐标输入、画布定位和取消提示的核心逻辑,确保原有功能正常运行

内容的提问来源于stack exchange,提问作者user7791824

火山引擎 最新活动