- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想开发一个桌面应用程序,该应用程序涉及每秒从串行端口接收地理坐标并实时添加到 map 中。该 map 应类似于以下链接:
我编写了一段代码来测试 Folium 执行此任务的能力。
import sys
import io
import folium
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QMainWindow, QPushButton
from PyQt5.QtWebEngineWidgets import QWebEngineView
class Window(QMainWindow):
def __init__(self):
super().__init__()
coordinate = (41.8828, 12.4761)
self.m = folium.Map(
zoom_start = 18,
location = coordinate,
control_scale=True,
tiles = None
)
folium.raster_layers.TileLayer(
tiles='http://mt1.google.com/vt/lyrs=m&h1=p1Z&x={x}&y={y}&z={z}',
name='Standard Roadmap',
attr = 'Google Map',
).add_to(self.m)
folium.raster_layers.TileLayer(
tiles='http://mt1.google.com/vt/lyrs=s&h1=p1Z&x={x}&y={y}&z={z}',
name='Satellite Only',
attr = 'Google Map',
).add_to(self.m)
folium.raster_layers.TileLayer(
tiles='http://mt1.google.com/vt/lyrs=y&h1=p1Z&x={x}&y={y}&z={z}',
name='Hybrid',
attr = 'Google Map',
).add_to(self.m)
folium.LayerControl().add_to(self.m)
folium.Marker(coordinate).add_to(self.m)
self.data = io.BytesIO()
self.m.save(self.data, close_file=False)
widget=QWidget()
vbox = QVBoxLayout()
buttun1 = QPushButton("Insert Marker")
buttun1.clicked.connect(self.insert_marker)
self.webView = QWebEngineView()
self.webView.setHtml(self.data.getvalue().decode())
self.webView.setContextMenuPolicy(Qt.NoContextMenu)
vbox.addWidget(buttun1)
vbox.addWidget(self.webView)
widget.setLayout(vbox)
self.setCentralWidget(widget)
self.setWindowTitle("App")
self.setMinimumSize(1000, 600)
self.showMaximized()
def insert_marker(self):
folium.CircleMarker([41.8829, 12.4766],
radius=2,
weight=5,
).add_to(self.m)
self.m.save(self.data, close_file=False)
self.webView.setHtml(self.data.getvalue().decode())
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())
在这段代码中,folium map 嵌入在一个 PyQt5 QWebEngineView 中,点击上面的按钮后,预计会在 map 中添加一个圆形标记。但是,点击后, map 只会重新渲染。
最佳答案
您可以通过 runJavaScript()
执行 javascript 添加标记。方法:
import io
import sys
from jinja2 import Template
import folium
from PyQt5.QtCore import pyqtSignal, QObject, QTimer
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtWebEngineWidgets import QWebEngineView
class CoordinateProvider(QObject):
coordinate_changed = pyqtSignal(float, float)
def __init__(self, parent=None):
super().__init__(parent)
self._timer = QTimer(interval=1000)
self._timer.timeout.connect(self.generate_coordinate)
def start(self):
self._timer.start()
def stop(self):
self._timer.stop()
def generate_coordinate(self):
import random
center_lat, center_lng = 41.8828, 12.4761
x, y = (random.uniform(-0.001, 0.001) for _ in range(2))
latitude = center_lat + x
longitude = center_lng + y
self.coordinate_changed.emit(latitude, longitude)
class Window(QMainWindow):
def __init__(self):
super().__init__()
coordinate = (41.8828, 12.4761)
self.map = folium.Map(
zoom_start=18, location=coordinate, control_scale=True, tiles=None
)
folium.raster_layers.TileLayer(
tiles="http://mt1.google.com/vt/lyrs=m&h1=p1Z&x={x}&y={y}&z={z}",
name="Standard Roadmap",
attr="Google Map",
).add_to(self.map)
folium.raster_layers.TileLayer(
tiles="http://mt1.google.com/vt/lyrs=s&h1=p1Z&x={x}&y={y}&z={z}",
name="Satellite Only",
attr="Google Map",
).add_to(self.map)
folium.raster_layers.TileLayer(
tiles="http://mt1.google.com/vt/lyrs=y&h1=p1Z&x={x}&y={y}&z={z}",
name="Hybrid",
attr="Google Map",
).add_to(self.map)
folium.LayerControl().add_to(self.map)
folium.Marker(coordinate).add_to(self.map)
data = io.BytesIO()
self.map.save(data, close_file=False)
self.map_view = QWebEngineView()
self.map_view.setHtml(data.getvalue().decode())
self.setCentralWidget(self.map_view)
def add_marker(self, latitude, longitude):
js = Template(
"""
L.marker([{{latitude}}, {{longitude}}] )
.addTo({{map}});
L.circleMarker(
[{{latitude}}, {{longitude}}], {
"bubblingMouseEvents": true,
"color": "#3388ff",
"dashArray": null,
"dashOffset": null,
"fill": false,
"fillColor": "#3388ff",
"fillOpacity": 0.2,
"fillRule": "evenodd",
"lineCap": "round",
"lineJoin": "round",
"opacity": 1.0,
"radius": 2,
"stroke": true,
"weight": 5
}
).addTo({{map}});
"""
).render(map=self.map.get_name(), latitude=latitude, longitude=longitude)
self.map_view.page().runJavaScript(js)
def main():
app = QApplication(sys.argv)
window = Window()
window.showMaximized()
provider = CoordinateProvider()
provider.coordinate_changed.connect(window.add_marker)
provider.start()
sys.exit(app.exec())
if __name__ == "__main__":
main()
关于python - 如何将圆形标记添加到嵌入在 QWebEngineView 中的渲染叶图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68614721/
好吧,我绞尽脑汁想弄明白 QWebEngine。 我理解实现虚拟功能的概念,但我不确定如何让用户点击的 url 成为页面或 View 请求的 newTab/newWindow 链接。 QWebEngi
当我使用以下代码浏览到一个页面时,结果是另一种语言(我认为是俄语)。当我在其他浏览器中浏览到相同的 url 时,我会按预期获得英文 404 页面。我尝试设置接受语言,但这没有帮助。我错过了什么? im
我在 PyQt5 和 Python 3.6 中使用 QWebEngineView 小部件。我想在加载页面时显示进度。出于演示目的,我只是使用打印语句来执行此操作(稍后我想让进度条小部件出现、显示进度并
我正在尝试使用 QWebEngineView 创建一个窗口,并在窗口关闭后删除 QWebEngineView。但是,QWebEngineView 似乎永远不会被删除,并且会继续运行我加载的任何 QUr
我有以下代码片段在 PySide 中工作,需要将其转换为在 PySide2 中工作。目的是在单击时强制所有链接在系统浏览器中打开(而不是小部件尝试加载它们): from PySide.QtWebKit
我正在将我的代码从 QtWebKit 转移到 QtWebEngine。总的来说,过渡相当顺利,但是,我被困在一个特定问题上。我使用 QWebEngineView 来显示 Google map 页面。一
如何在QWebEngineView中改变用户代理?我知道 QWebView 有一种方法可以做到这一点,但我没有找到 QWebEngineView 的解决方案。 最佳答案 在构建 QWebEngineP
如何检测 QWebEngineView 小部件中的鼠标点击? 我试过这个但不起作用: class MyWin(QtWidgets.QMainWindow): def __init__(self
我想编写一个程序来自动测试不同屏幕尺寸的网页尺寸。我使用 QWebEngineView 创建窗口,我需要模拟用户鼠标在网页中单击并拖放元素。我试过 qApp->sendEvent 和 qApp->po
我想开发一个桌面应用程序,该应用程序涉及每秒从串行端口接收地理坐标并实时添加到 map 中。该 map 应类似于以下链接: 我编写了一段代码来测试 Folium 执行此任务的能力。 import sy
我正在构建一个 pyqt5 桌面界面,我在其中使用 QWebEngineView 来显示一个 html 文件,其中我显示了 Leaflet map 。这工作正常。下一步是导出用户添加到 map 的所有
我有这部分工作,但我面临几个困难: 1) 看来 QWebEnginePage 需要一个 QWebEngineView。 (请参阅此处的 setView() 方法: https://code.woboq
我正在尝试在 Qt 中创建一个加载 URL 的对话框(我不想向最终用户公开,因此是一个对话框)。一旦用户在页面上输入了他们的凭据,服务器就会返回一个我想要捕获的重定向 URL。我怎样才能做到这一点?
有没有功能 QWebView 和 QWebEngineView 的区别?如果我理解正确,QWebView 是 webkit,而 QWebEngineView 是闪烁的。程序员有什么区别吗?一个比另一个
我来自 tkinter 背景,所有东西都可以放在框架中。 我怎样才能让我当前的工作代码结果(它启动一个页面的 WebEngine View ,在这个例子中是谷歌)位于主窗口中,如图所示?例如,我希望将
我来自 tkinter 背景,所有东西都可以放在框架中。 我怎样才能让我当前的工作代码结果(它启动一个页面的 WebEngine View ,在这个例子中是谷歌)位于主窗口中,如图所示?例如,我希望将
我最终想要完成的是捕获用户在网站中输入的用户名和密码。例如,如果用户在 Facebook 登录中输入“test@example.com”作为电子邮件地址,然后单击“提交”,我想将该电子邮件地址存储在我
我有一个简单的网页,我想提取文本 My First Heading。 //This is a single line comment /* This is a block comment */
也许这是一个错误。有一个顶级小部件必须有阴影。在那个小部件中,我想显示一个浏览器(只能呈现 html)。顶级小部件的不透明度必须是可调的。为了使投影效果如预期(不显示黑色边框),我们需要将 Qt::W
编辑:这不是重复的。链接的问题处理 CORS 安全问题,浏览器不允许您从不同来源加载脚本。我的问题与基本资源加载方案有关(file:/// vs qrc:/)。 我正在尝试使用 file:/// 方案
我是一名优秀的程序员,十分优秀!