pyQt5 Qwebview网页调用python方法

# _*_  coding: utf-8  _*_
import sys, os
from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout)
from PyQt5.QtWebKitWidgets import (QWebView)
from PyQt5 import (QtCore)

class MainFrm(QWidget):
    def __init__(self):
        super().__init__()
        self.uri = 'page.htm'
        self.title = '测试'
        self.initUI()

    def test(self, msg):
        self.test_js(msg)

    def test_js(self, str):
        self.webview.page().mainFrame().evaluateJavaScript("test_js('%s')" % str)

    def initUI(self):
        grid = QGridLayout()
        self.webview = QWebView()
        url = 'http://a.b.c/page.htm'
        url = 'file:///' + os.path.abspath('page.htm')
        self.webview.load(QtCore.QUrl(url))
        self.webview.show()
        grid.setContentsMargins(0,0,0,0)
        grid.addWidget(self.webview, 1, 0)
        self.setLayout(grid)
        self.resize(800, 500)
        self.setWindowTitle(self.title)
        self.show()


class handleJS(QtCore.QObject):
    def __init__(self):
        super().__init__()
        self.frm  = None

    @QtCore.pyqtSlot(str)
    def test(self, msg):
        self.frm.test(msg)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    frm = MainFrm()
    hjs = handleJS()
    page = frm.webview.page().mainFrame()
    hjs.frm = frm
    page.javaScriptWindowObjectCleared.connect(
        lambda: page.addToJavaScriptWindowObject('myWindow', hjs)
    )
    sys.exit(app.exec_())

page.htm

<!DOCTYPE html>
<html>
<head>
    <title>test</title>
    <meta charset="utf-8">
</head>
<body>
<button onclick="test()">测试</button>
<script type="text/javascript">
function test(){
    myWindow.test('hello world');
}

function test_js(str){
    alert(str);
}
</script>
</body>
</html>

 

posted @ 2019-04-23 14:39  1553  阅读(3306)  评论(0编辑  收藏  举报