环境
- 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()