解决QWebEngineView读取本地html文件卡顿的BUG

环境

  • python3.6.8
  • PyQt5 5.12.2
  • win10 64位

情景:

目前用PyQt5的QWebEngineView做了一个文件管理预览功能,目前有一个问题,当我用load方法加载了一个本地的html文件,然后当我想去用这个browser去打开另一个html文件时

  • 先调用browser的stop方法
  • 然后调用load方法

然后卡顿产生了

思路

loadProgress信号绑定函数实时显示加载进度的时候,进度一直不能到100%,只有加载html文件时会卡顿,加载图片文件时没有任何卡顿,估计是由于本地html的js加载时报错误的原因,导致browser一直加载,无法完成。
于是一番百度后,也没查到什么,google之后发现国外友人也遇到了这个问题,也没有人解决。

采用了以下几种方法尝试终究是失败

  • 设定一个timer计时器,browser开始加载时 loadStarted信号绑定函数启动计时器,然后计时器事件到了之后发送timeout信号,调用browser的stop方法,没卵用
  • 每次加载新文件之前销毁browser,手动回收 del browser,然后重新创建一个browser,然后加载新文件,然后依然卡顿

解决方法

于是使用了第三种方法,估计时性能最慢的方法吧,但是解决问题了,

  • 先调用browser的stop方法
  • 读取要打开的文件,内容为html
  • 调用browser的setHtml方法,,将读取到的内容传给这个方法
  • 调用browser的show方法

然后就解决了卡顿的问题。
虽然性能可能低一些,但是没什么大影响,解决问题就行。

if file_path.endswith('.html'):
    f = open(file_url,'r',encoding='utf-8')
    html = f.read()
    self.browser.stop()
    self.browser.setHtml(html)
else:
    self.browser.stop()
    self.browser.load(QUrl('file:///' + file_url))

self.browser.show()
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值