'''
UI.py
'''
import sys
import os
from PyQt5.QtWebChannel import QWebChannel
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import *
from CallHandler import CallHandler
channel = QWebChannel()
handler = CallHandler()
channel.registerObject('py', handler)
class UI(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('web页面调python代码')
layout=QVBoxLayout()
self.browser = QWebEngineView()
url = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'index.html')
self.browser.load(QUrl.fromLocalFile(url))
self.browser.page().setWebChannel(channel)
layout.addWidget(self.browser)
self.setLayout(layout)
def getFullName(self):
value = "Hello World"
self.browser.page().runJavaScript('fullName("' + value + '");')
if __name__ == '__main__':
app = QApplication(sys.argv)
win = UI()
win.show()
sys.exit(app.exec_())
'''
CallHandler.py
给web页面调用的 python方法
'''
from PyQt5.QtCore import QObject, pyqtSlot
class CallHandler(QObject):
@pyqtSlot(int, result=int)
def factorial(self, n):
if n == 0 or n == 1:
return 1
else:
return self.factorial(n - 1) * n
@pyqtSlot(str, result=str)
def typeTest(self, jsonStr):
print(type(jsonStr))
print(jsonStr)
import json
print(type(json.loads(jsonStr)))
print(json.loads(jsonStr))
return jsonStr
//index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>web页面的title</title>
</head>
<body>
<button id="btn1">调python函数 传json过去</button>
<button id="btn2">调python阶乘函数</button>
</body>
<script src="qwebchannel.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function () {
new QWebChannel(qt.webChannelTransport, function(channel) {
window.py = channel.objects.py;
});
});
document.getElementById("btn1").addEventListener("click", function () {
py.typeTest('{"err_no":0,"errmsg":""}', function (result) {
alert(result)
})
})
document.getElementById("btn2").addEventListener("click", function () {
py.factorial(3, function (result) {
alert(result)
})
})
function fullName(value) {
alert(value);
var firstname = document.getElementById('firstname').value;
var lastname = document.getElementById('lastname').value;
var fullname = firstname + " " + lastname;
document.getElementById('fullname').value = fullname;
return fullname;
}
</script>
</html>