概述
最近用pyqt5封装个项目。
html与python之间交互是必不可少的。
根据度娘资料,写个例子!
在PyQt5.9中, 应用QWebEngineView和QWebChannel技术, 可以进行HTML与本地代码进行交互.
要点:创建交互对象, 基于QObject, 定义信息槽
创建QWebChannel, 在channel中注册交互对象
设置页面WebChannel
定义网页在网页中包含qwebchannel.js
在DomReady时, 创建js QWebChannel, 连接到本地对象
实例:
一. 创建Html文件
QWebChannel测试window.onload = function () {
new QWebChannel(qt.webChannelTransport, function (channel) {
window.pyjs = channel.objects.pyjs;
pyjs.myHello(alert);
});
}
this is test !
function qt5test() {
pyjs.myTest('这是测试传参的',function (res) {
alert(res);
});
}
function uptext(msg) {
document.getElementById('test').innerHTML=msg;
}
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):
view.page().runJavaScript('uptext("hello, Python");')
print('call received')
return 'hello, Python'
@pyqtSlot(str,result=str)
def myTest(self,test):
return test
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:/testPyQt5/html/index.html"
view.load(QUrl(url_string))
view.show()
sys.exit(app.exec_())
注意:url_string = "file:///D:/testPyQt5/html/index.html"这一句要换成自己的文件,qwebchannel.js 与 test.html 文件放在同一个目录
qt5接收js传递的参数:
pyqt中信号与槽的参数传递。
当信号与槽函数的参数数量相同时,它们参数类型要完全一致。
信号与槽不能有缺省参数。
当信号的参数与槽函数的参数数量不同时,只能是信号的参数数量多于槽函数的参数数量,且前面相同数量的参数类型应一致,信号中多余的参数会被忽略。
此外,在不进行参数传递时,信号槽绑定时也是要求信号的参数数量大于等于槽函数的参数数量。这种情况一般是一个带参数的信号去绑定一个无参数的槽函数。
可以出传递的参数类型有很多种:str、int、list、object、float、tuple、dict等等
最后
以上就是震动大侠为你收集整理的pyqt5与html数据交互原理,pyqt5与本地html进行js交互的全部内容,希望文章能够帮你解决pyqt5与html数据交互原理,pyqt5与本地html进行js交互所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复