javascript - PyQt5 QWebView : Load . 加载.js文件的html文件

标签 javascript pyqt pyqt5 qwebview qwebkit

我正在尝试使用 QWebView 显示传单 map (灵感来自 here )。我的文件夹的结构如下所示:

webkit_leaflet/
├── map.html
├── map.js
└── map.py

当我运行包含 map.htmlmap.js 中的所有内容的 map.py 时,代码就可以工作。

from PyQt5 import QtWidgets, QtWebKitWidgets
import sys


# Create application
app = QtWidgets.QApplication(sys.argv)

# Add window
win = QtWidgets.QWidget()
win.setWindowTitle('QWebView Map Test')

# Add layout
layout = QtWidgets.QVBoxLayout()
win.setLayout(layout)

# Create QWebView
view = QtWebKitWidgets.QWebView()

# include code from map.html and map.js

view.setHtml('''
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
    <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
    <style>
        body { padding: 0; margin: 0; }
        html, body, #map { height: 100%; }
    </style>
</head>
<body>
    <div id="map"></div>
    <script>
        var map = L.map('map').setView([42.35, -71.08], 13);
        L.tileLayer('http://tiles.mapc.org/basemap/{z}/{x}/{y}.png',
        {
            maxZoom: 18,
            attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
                '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
                'Imagery &copy; <a href="http://mapbox.com">Mapbox</a>',
            id: 'examples.map-i86nkdio',
        }).addTo(map);
    </script>
</body>
</html>

''')

# Add QWebView to the layout
layout.addWidget(view)

# Show window, run app
win.show()
app.exec_()

但是,如果我尝试使用 QtCore.QUrl() 加载 map.html ,则什么也不会发生。

from PyQt5 import QtCore, QtWidgets, QtWebKitWidgets
import sys


# Create application
app = QtWidgets.QApplication(sys.argv)

# Add window
win = QtWidgets.QWidget()
win.setWindowTitle('QWebView Map Test')

# Add layout
layout = QtWidgets.QVBoxLayout()
win.setLayout(layout)

# Create QWebView
view = QtWebKitWidgets.QWebView()

# load .html file
view.load(QtCore.QUrl('map.html'))

layout.addWidget(view)

win.show()
app.exec_()

有人可以告诉我当我从外部 .html 文件中加载 JavaScript 文件时如何在 PyQt5 中显示 .html 文件的内容吗?

这是map.html的代码:

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
    <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
    <style>
        body { padding: 0; margin: 0; }
        html, body, #map { height: 100%; }
    </style>
</head>
<body>
    <div id="map"></div>
    <script src="map.js"></script>
</body>
</html>

还有map.js的代码

var map = L.map('map').setView([42.35, -71.08], 13);
L.tileLayer('http://tiles.mapc.org/basemap/{z}/{x}/{y}.png',
{
    maxZoom: 18,
    attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
        '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
        'Imagery &copy; <a href="http://mapbox.com">Mapbox</a>',
    id: 'examples.map-i86nkdio',
}).addTo(map);

最佳答案

使用QUrl.fromLocalFile传递 html 文件。您似乎还需要传递文件的绝对路径。

import os
view.load(QtCore.QUrl.fromLocalFile(os.path.abspath('map.html')))

关于javascript - PyQt5 QWebView : Load . 加载.js文件的html文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40634902/

相关文章:

javascript - 使用 jQuery 显示和隐藏 div 以及添加/清除 div 内容

javascript - 如何在两个数字之间进行 array.map

python - PyQt5:如何在多次覆盖后恢复默认光标?

python - 如何在不同的类中使用 Slot+Signal?

python - QLabel 未显示在 QWidget 窗口中

python - 从按键事件设置小部件

javascript - 在应用 substr() 之前检查 .length 吗?

javascript - Jquery - 如何延迟后续动画?

python - 给定一个 pyqtBoundSignal 如何确定插槽?

python - 如何在我的文本编辑器中使用 PyQt 的字体小部件?