1. 程式人生 > >PyQt5.9 Html與本地代碼交互實例

PyQt5.9 Html與本地代碼交互實例

gis markdown gist channel bsp int str func hello

在PyQt5.9中, 應用QWebEngineView和QWebChannel技術, 可以進行HTML與本地代碼進行交互.

要點:

  1. 創建交互對象, 基於QObject, 定義信息槽
  2. 創建QWebChannel, 在channel中註冊交互對象
  3. 設置頁面WebChannel
  4. 定義網頁
    • 在網頁中包含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>

qwebchannel.js源代碼

二. 創建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. 沒有查到相應文檔

PyQt5.9 Html與本地代碼交互實例