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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM