在PyQt5.9中, 應用QWebEngineView和QWebChannel技術, 可以進行HTML與本地代碼進行交互.
要點:
- 創建交互對象, 基於QObject, 定義信息槽
- 創建QWebChannel, 在channel中注冊交互對象
- 設置頁面WebChannel
- 定義網頁
-
- 在網頁中包含qwebchannel.js
- 在DomReady時, 創建js QWebChannel, 連接到本地對象
實例:
一. 創建Html文件
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <script type="text/javascript" src="qwebchannel.js"></script> <title>QWebChannel測試</title> <script> window.onload = function () { new QWebChannel(qt.webChannelTransport, function (channel) { window.pyjs = channel.objects.pyjs; alert(pyjs.myHello()) }); } </script> </head> <body> </body> </html>
二. 創建Python代碼
#!/usr/bin/env python # -*- coding:utf-8 -*- import sys from PyQt5.QtWidgets import QApplication from PyQt5.QtCore import QObject, pyqtSlot, QUrl from PyQt5.QtWebChannel import QWebChannel from PyQt5.QtWebEngineWidgets import QWebEngineView class CallHandler(QObject): @pyqtSlot(result=str) def myHello(self): print('call received') return 'hello, Python' if __name__ == '__main__': app = QApplication(sys.argv) view = QWebEngineView() channel = QWebChannel() handler = CallHandler() channel.registerObject('pyjs', handler) view.page().setWebChannel(channel) url_string = "file:///D:/qt5/201709/webengine/test.html" view.load(QUrl(url_string)) view.show() sys.exit(app.exec_())
問題:
在PyQt5.9中, QWebEngineView響應調用pyqtSlot時, 沒有返回值, 返回null. 沒有查到相應文檔