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




