zam*_*rov 2 javascript python qt pyqt
我曾经通过附加一个对象来做到这一点
self.page().mainFrame().addToJavaScriptWindowObject("js_interface", self.jsi)
Run Code Online (Sandbox Code Playgroud)
在5.7我做:
self.page().setWebChannel(self.jsi)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试访问公开的函数时,我理解为可以获得JavaScript错误:
js: Uncaught ReferenceError: js_interface is not defined
Run Code Online (Sandbox Code Playgroud)
谷歌搜索我发现我应该使用qwebchannel.js,但我找不到文件或如何在任何地方使用它的说明(有一些信息,但只有在安装QT时提供的一些例子,而不是PyQT).
xuh*_*hcc 11
您可以使用脚本标记将qwebchannel.js包含到html页面中:
<script src="qrc:///qtwebchannel/qwebchannel.js"></script>
Run Code Online (Sandbox Code Playgroud)
然后,在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)
Run Code Online (Sandbox Code Playgroud)
与Web渠道交互的JS代码:
new QWebChannel(qt.webChannelTransport, function (channel) {
window.handler = channel.objects.handler;
window.handler.test();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2700 次 |
| 最近记录: |