我曾经通过附加一个对象来做到这一点
self.page().mainFrame().addToJavaScriptWindowObject("js_interface", self.jsi)
在 5.7 中我这样做:
self.page().setWebChannel(self.jsi)
但当我尝试访问公开的函数时,我会得到一个 JavaScript 错误,这是可以理解的:
js: Uncaught ReferenceError: js_interface is not defined
谷歌搜索后我发现我应该使用 qwebchannel.js,但我找不到文件或有关如何在任何地方使用它的说明(有一些信息,但仅在安装 QT 时提供的一些示例中,而不是 PyQT)。
您可以包括qwebchannel.js使用 script 标签进入 html 页面:
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
然后,在 python 端创建一个 Web 通道:
from PyQt5.QtCore import QObject, pyqtSlot
from PyQt5.QtWebChannel import QWebChannel
from PyQt5.QtWebEngineWidgets import QWebEngineView
class CallHandler(QObject):
@pyqtSlot()
def test(self):
print('call received')
view = QWebEngineView()
channel = QWebChannel()
handler = CallHandler()
channel.registerObject('handler', handler)
view.page().setWebChannel(channel)
与Web通道交互的JS代码:
new QWebChannel(qt.webChannelTransport, function (channel) {
window.handler = channel.objects.handler;
window.handler.test();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)