网站首页 > 教程分享 正文
现在写代码,开始习惯把DeepSeek当作字典工具了,对于自己陌生的地方,问一问它,它均会给出详细的答案,包括使用方法方案,这以后的程序员真要得加油了!普通程序员危机重重了!不多说了,那个行业都要多学习,不学习迟早就要下岗了!之前我使用html实现了地图标记功能,现在我使用Pyside6去实现图形化界面功能。完整代码可以查看文末。
主要实现的方法:Pyside6的QWebEngineView加载HTML文件访问地图,QWebEngineView与JavaScript双向通信实现获取坐标值、添加标记、删除标记、加载标记等功能。
技术难点:
1、监听点击事件并回传坐标
在 HTML 中,通过高德地图的 map.on('click', ...) 监听点击事件,并通过 window.pyObject 将坐标传递给 PySide6。
html文件中:
// 监听地图点击事件
map.on('click', (e) => {
const lng = e.lnglat.getLng();
const lat = e.lnglat.getLat();
// 调用 PySide6 暴露的方法
if (window.pyObject) {
window.pyObject.onMapClicked(lng, lat);
}
});
py文件中:
class Bridge(QObject):
def __init__(self, parent=None):
super().__init__(parent)
self.map_window = parent
@Slot(float, float)
def onMapClicked(self, lng, lat):
# 安全更新 UI
QMetaObject.invokeMethod(
self.map_window.input_lng, "setText",
Qt.QueuedConnection, Q_ARG(str, str(lng))
)
QMetaObject.invokeMethod(
self.map_window.input_lat, "setText",
Qt.QueuedConnection, Q_ARG(str, str(lat))
)
print(f"坐标已接收: {lng}, {lat}") # 控制台输出确认
#……其他程序模块
# 配置 QWebChannel
self.channel = QWebChannel()
self.bridge = Bridge(self)
self.channel.registerObject("pyObject", self.bridge) #创建一个 QWebChannel 实例
self.browser.page().setWebChannel(self.channel)
#……其他程序模块
通过上面两个函数,就会实现:
(1)点击地图获取坐标:用户点击地图时,JavaScript 会捕获经纬度并通过
window.pyObject.onMapClicked(lng, lat) 传递给 PySide6。
(2)自动填充输入框:PySide6 接收到坐标后,自动填充经度和纬度的输入框。
2、标记点操作
通过QWebEngineView绑定HTML之后,就可以对HTML中的JavaScript函数进行相应的操作,以添加标记为例
python代码部分:
def add_marker(self):
lng = self.input_lng.text()
lat = self.input_lat.text()
title = self.input_title.text()
if lng and lat:
js_code = f"addMarker({lng}, {lat}, '{title}')"
self.browser.page().runJavaScript(js_code)
HTML代码部分:
function addMarker(lng, lat, title) {
// 获取当前页面的URL
var currentURL = window.location.href;
// 提取目录路径
var directoryPath = currentURL.substring(0, currentURL.lastIndexOf('/') + 1);
if (!map) return;
const marker = new AMap.Marker({
position: [lng, lat],
map: map,
icon: directoryPath + "towerdot.png"
});
marker.setExtData({ title: title || "未命名标记" });
marker.on('click', () => {
new AMap.InfoWindow({
content: `<strong>${title}</strong><br>经纬度:${lng},${lat}`
}).open(map, marker.getPosition());
});
markers.push(marker);
}
从html中我们看出,添加标记点之后通过icon显示自己的图标(当前目录下towerdot.png这个图表),也可以使用官方的地址为"
https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png"。其他标签操作类似。
代码地址:
https://gitee.com/tangzonghuan/map-tool.git
猜你喜欢
- 2025-05-10 微信外H5跳转小程序——组件(vue项目)
- 2025-05-10 5种JavaScript实现页面跳转的方法,赶紧收藏
- 2025-05-10 防止网站被恶意反向代理(如何防止恶意网站跳转)
- 2025-05-10 如何免费申请ssl,并且安装!(ssl 免费)
- 2025-05-10 海报丨英勇精神 世代闪光(英雄精神代代传绘画)
- 2025-05-10 使用浏览器访问PLC的自定义网页(使用浏览器访问plc的自定义网页是什么)
- 2025-05-10 详解三类的友情链接不能交换(友情链接可以随便找链接加吗)
- 2025-05-10 使用JavaScript如何获取网站网址(js语句如何获取网页元素)
- 2025-05-10 web开发-从facebook内置浏览器中网页,唤起Safari或chrome浏览器
- 2025-05-10 「前端开发」eval() 函数认知和学习以及注意事项
你 发表评论:
欢迎- 最近发表
-
- 微信外H5跳转小程序——组件(vue项目)
- 5种JavaScript实现页面跳转的方法,赶紧收藏
- 防止网站被恶意反向代理(如何防止恶意网站跳转)
- DeepSeek代码之旅2:卫星地图标记方法之——Pyside6实现
- 如何免费申请ssl,并且安装!(ssl 免费)
- 海报丨英勇精神 世代闪光(英雄精神代代传绘画)
- 使用浏览器访问PLC的自定义网页(使用浏览器访问plc的自定义网页是什么)
- 详解三类的友情链接不能交换(友情链接可以随便找链接加吗)
- 使用JavaScript如何获取网站网址(js语句如何获取网页元素)
- web开发-从facebook内置浏览器中网页,唤起Safari或chrome浏览器
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)