Python Qt Webengine未加载openstreetmap分幅

Python Qt Webengine未加载openstreetmap分幅,python,pyqt5,openstreetmap,qtwebengine,Python,Pyqt5,Openstreetmap,Qtwebengine,我编写了一个类似这样的python测试程序来显示openstreetmap: 从PyQt5.QtWidgets导入QApplication 从PyQt5.QtCore导入QUrl 从PyQt5.QtWebEngineWidgets导入QWebEngineView 导入系统 def mainPyQt5(): url='1〕file:///./index.html' app=QApplication(sys.argv) browser=QWebEngineView() browser.load(QU

我编写了一个类似这样的python测试程序来显示openstreetmap:

从PyQt5.QtWidgets导入QApplication
从PyQt5.QtCore导入QUrl
从PyQt5.QtWebEngineWidgets导入QWebEngineView
导入系统
def mainPyQt5():
url='1〕file:///./index.html'
app=QApplication(sys.argv)
browser=QWebEngineView()
browser.load(QUrl(url))
browser.show()
sys.exit(app.exec_())
mainPyQt5()
QWebEngineView获取的index.html只调用openstreetmap:

OSM和传单
//创建地图选项
变量映射选项={
中间:[45.641174,9.114828],
缩放:10
}
//创建贴图对象
var map=新的L.map(“map”,mapOptions);
//创建图层对象
var layer=newl.TileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png');
//向地图添加图层
map.addLayer(层);

如果我使用普通浏览器获取index.html,地图将按预期显示,但如果我使用QWebEngineView调用简单的python程序,则不会从openstreetmap下载平铺。如果我用maps.stamen.com替换openstreetmap,无论是浏览器还是python脚本,一切都很好。

默认情况下,QtWebEngine不像流行浏览器那样设置默认标题。在这种情况下,openstreetmap服务器需要知道生成地图的“接受语言”,因为例如,城市名称将取决于过滤非浏览器流量的语言。解决方案是实现一个添加该标头的:

导入操作系统路径
导入系统
从PyQt5.QtCore导入QUrl
从PyQt5.QtWidgets导入QApplication
从PyQt5.QtWebEngineCore导入QWebEngineUrlRequestInterceptor
从PyQt5.QtWebEngineWidgets导入QWebEngineView
类侦听器(QWebEngineUrlRequestInterceptor):
def截取请求(自我,信息):
信息setHttpHeader(b“接受语言”,b“en-US,en;q=0.9,es;q=0.8,de;q=0.7”)
def mainPyQt5():
CURRENT_DIR=os.path.dirname(os.path.realpath(uu文件_uu))
filename=os.path.join(当前目录,“index.html”)
app=QApplication(sys.argv)
browser=QWebEngineView()
拦截器=拦截器()
browser.page().profile().setUrlRequestInterceptor(拦截器)
browser.load(QUrl.fromLocalFile(文件名))
browser.show()
sys.exit(app.exec_())
如果名称=“\uuuuu main\uuuuuuuu”:
mainPyQt5()

“在这种情况下,openstreetmap服务器需要知道“接受语言”来生成地图,因为例如,城市名称将取决于语言”。不,OSM不基于ACCEPT-LANGUAGE标头设置任何名称,OSM的光栅分幅无法实现这一点。但是缺少ACCEPT-LANGUAGE标头可能表示非浏览器,因此请求可能会被阻止。太棒了!非常感谢您的清晰解释和解决方案!是的,我认为crnm关于这个标题限制的说法是正确的,更多的是关于过滤掉非浏览器流量。核心的openstreetmap tile服务器在流量方面遇到了很多困难,因此基本上你不应该将其用于此类事情,或者至少“不要在tile.openstreetmap.org上硬编码任何URL,因为这样做会限制你在服务中断或阻塞时快速反应的能力”但是,请查看这里列出的一些备选方案:@HarryWood and cmm您是对的,我已经更正了我的答案。谢谢您的回答。然而,当我运行python内核时,它破坏了我的代码,并且python内核死亡。我怀疑使用网络频道可能会导致这些问题。有没有办法解决这个问题?