实现诉求:将本地html文件通过webengine在软件上输出(软件指的是pyqt5-designer设计的页面,刚学的不知道怎么说勿喷)
平台MacOS 和win 双平台都试过,直接load(‘svgaPage.html’)本地文件均无效
不敢说全网,起码卡了3天,找了不下于1000个解答,还是没解决(可能有解决方案但是我看不懂,所以特地发帖麻烦大家了)
经测将本地的html用浏览器打开后,将浏览器中的地址复制上去后有效,能成功输出;证明源码没问题;但是实际情况是打包之后这个地址是动态的,就是尾部有?html=1x3jk这种的,随机生成的;所以没办法正确用。
本人猜测是webengine没有调用JS,但是由于初学者一枚,又不太敢肯定,无头苍蝇一样乱找了好久了。
结构:都在根目录
【svgaPage.html】
<html>
<script src="https://cdn.jsdelivr.net/npm/svgaplayerweb@2.3.1/build/svga.min.js"></script>
<script src="//s1.yy.com/ued_web_static/lib/jszip/3.1.4/??jszip.min.js,jszip-utils.min.js" charset="utf-8"></script>
<script src="./SVGAPlayer/build/svga.min.js">import SVGA from 'svgaplayerweb'</script>
<div id="demoCanvas" style="width: 100%;height: 100%;background-color: chartreuse"></div>
<script>
var player = new SVGA.Player('#demoCanvas');
var parser = new SVGA.Parser('#demoCanvas'); // 如果你需要支持 IE6+,那么必须把同样的选择器传给 Parser。
parser.load('./fansCrad/fans.svga', function(videoItem) {
//这里开始具体控制
player.loops = 1; //循环次数
player.clearsAfterStop = true; //播放完是否清除内容
player.setVideoItem(videoItem); //需要获取load返回参数才能生效(暂时不知道什么意思)
player.startAnimation(); //开始播放
// player.pauseAnimation(); 暂停播放
// player.stopAnimation(); 停止播放
// player.onFrame(); 当前播放到第几帧,根据业务调整
})
</script>
</html>
【main.py】
def showSvga(self):
#http://localhost:63342/live_tools/svgaPage.html?_ijt=kt3p2cblbp8000nrtnfevsilmb&_ij_reload=RELOAD_ON_SAVE【这个链接直接放入QUrl的话是生效的,但是实际是动态的地址,我不能这样直接写进去】
self.videoEngine.load(QUrl(r"./fansCrad/fans.svga"))
self.horizontalLayout.addWidget(self.videoEngine) #将代码组件放入layout图层
self.videoEngine.show() #这个似乎要不要可以
layout图层会从透明变白,说明应该是参数过去;但是网页内容一点也不显示;无报错内容
因为直接讲浏览器地址复制到url是可以打开的,所以基本上可以说代码没啥问题;应该就出在这个动态地址上。
我了解到一种方式好像叫什么反向编译?这个意思是不是将js内容生成的地址反向的形成一种代码状态可以用于QURL?没太看懂。
我目前能想到的解决思路有2个;
1、使用服务器,这样地址就有了(但是真的没必要呀;只是一个小程序;而且这也不是解决问题的根本;本地还是没有实现)
2、在main代码中直接写js??我也不知道这个能不能实现;看了很多零碎的代码都是不完整的;所以很难看懂。
如果有朋友能协助一下,期望可以尽可能的完整点解答和通俗一点哈(手动比心);对了,我用的是python3 页面是qt-designer设计的