1.QWebEngineView简介
可以通过QWebEngineView的page().runJavaScript()方法执行页面中的js方法,并且可以指定一个回调函数来接收js的返回值。
2.QWebEngineView案例
import sys
import os
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QPushButton
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEngineView
"""
提示:ModuleNotFoundError: No module named 'PyQt5.QtWebEngineWidgets' 错误
安装pip install PyQt5 PyQtWebEngine
"""
class QWebEngineViewCallJs(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('WebEngineVIew与JS交互')
self.resize(600, 400)
v_layout = QVBoxLayout(self)
self.browser = QWebEngineView()
html = os.path.join(os.getcwd(), 'demo.html')
self.browser.load(QUrl.fromLocalFile(html)) # 加载本地html
self.set_name = QPushButton('设置姓名')
self.set_name.clicked.connect(self.set_name_func)
v_layout.addWidget(self.browser)
v_layout.addWidget(self.set_name)
def js_callback(self, res):
# 通过一个回调函数的方式获取js方法的返回值
print(res)
def set_name_func(self):
# 通过QWebEngineView的page().runJavaScript()方法执行页面中的js方法,参数1:传入要执行的js方法名【如需向js代码传参,即可按照js方法参数输入依次传入】,参数2:接收返回值的回调函数
self.browser.page().runJavaScript("setFullName('Hello word')", self.js_callback)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWebEngineViewCallJs()
w.show()
app.exec()
demo.html
Title
<script>
function setFullName(value) {
alert(value)
let firstname = document.getElementById("first_name").value
let lastname = document.getElementById("last_name").value
document.getElementById("full_name").value = firstname + lastname
document.getElementById("submit").style.display = "block"
return firstname + lastname
}
</script>