javascript - 如何将自定义 HTML 添加到 pyqtlet?
问题描述
我的实际问题要具体得多,但我认为更一般的答案将有助于我应对未来的需求。
我实际上需要为底层启用leaflet-extras
插件。leaflet
pyqtlet
文档说:
下载 Leaflet-providers.js 并在包含 Leaflet 后将其包含在您的页面中,例如:
<head>
...
<script src="http://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
<script src="js/leaflet-providers.js"></script>
</head>
接着:
// add Stamen Watercolor to map.
L.tileLayer.provider('Stamen.Watercolor').addTo(map);
当然,所有这一切都是假设您正在编写一个 JavaScript 应用程序,而我在pyqtlet
环境中。
我试图以一种非常丑陋的方式应对:
- 下载
leaflet-providers.js
到我的venv/lib/python3.8/site-packages/pyqtlet/web/modules
- 将该行添加
<script src="modules/leaflet-providers.js"></script>
到我的venv/lib/python3.8/site-packages/pyqtlet/web/map.html
- 用于
self.map.runJavaScript("L.tileLayer.provider('Stamen.Watercolor'). addTo(map)")
激活所需的tileLayer
这确实有效,但我确信有一种更清洁的方法可以实现同样的效果。
欢迎任何提示。
解决方案
A trivial solution is to read the .js and run it:
with open("/path/of/leaflet-providers.js") as f:
self.map.runJavaScript(f.read())
self.map.runJavaScript("L.tileLayer.provider('Stamen.Watercolor'). addTo(map)")
Another similar option is to use document.createElement:
with open("/path/of/leaflet-providers.js") as f:
code = f.read()
SCRIPT = """
const script = document.createElement('script');
script.type = 'text/javascript';
document.head.appendChild(script);
script.text = `%s`;
""" % (
code,
)
self.map.runJavaScript(SCRIPT)
self.map.runJavaScript(
"L.tileLayer.provider('Stamen.Watercolor'). addTo(map)"
)
推荐阅读
- heroku - Heroku + Cloudflare DNS 设置 - “没有这样的应用程序”
- python - python从word docx读取标题
- javascript - 导入 .less 变量以在 React 样式组件中使用
- rust - 在遍历结构数组时访问结构的值
- python - 路由 celery 任务
- javascript - Vue-Router: Refresing(F5) 当前页面
- python - python最短路径点
- android - Android 上一致的状态栏外观
- javascript - 加载可变尺寸的图像后保持滚动位置在底部
- c# - 使用 WriteAllText 从 ListView 写入 txt 文档