在QWebEngineView

问题描述

使用PyQt5.QtWebEngineWidgets,当使用一堆诸如MathJax之类的JavaScript渲染网站时,我发现有关QWebEngineView / QWebEnginePage性能的奇怪效果

例如,下面是显示此类网站的两个代码

  1. 创建QWebEngineView并使用其load
from PyQt5 import QtCore,QtWidgets
from PyQt5.QtWebEngineWidgets import QWebEngineView,QWebEnginePage

app = QtWidgets.QApplication.instance() or QtWidgets.QApplication([])
url = "https://www.tuhh.de/MathJax/test/sample.html"

view = QWebEngineView()
view.load(QtCore.QUrl("about:blank"))
view.show()

def test():
    view.load(QtCore.QUrl(url))

QtCore.QTimer.singleShot(1,test)   # set after view.show is done
app.exec_()

这是应该的,它又快又好。

  1. 创建视图,而不是分别创建QWebEnginePage并通过setPage将其设置为视图:
from PyQt5 import QtCore,QWebEnginePage

app = QtWidgets.QApplication.instance() or QtWidgets.QApplication([])
url = "https://www.tuhh.de/MathJax/test/sample.html"

view = QWebEngineView()
view.load(QtCore.QUrl("about:blank"))
view.show()

page = None
def test():
    global page
    page = QWebEnginePage(view)
    page.load(QtCore.QUrl(url))    
    view.setPage(page)    

QtCore.QTimer.singleShot(1,test)   # set after view.show is done
app.exec_()

在我的PC上,第二个方法大约需要20到30秒才能完成MathJax渲染,在此过程中,您可以在左下角看到“正在处理数学”或“排版数学”。

有趣的是,这种情况仅在我开始使用Pyqt5.12或PyQt5.13时才出现,但PyQt5.9(win64)并非如此。

有人可以复制吗?

有人能弄明白为什么它变得这么慢吗?

我问的原因是因为在模块中,我将QWebEnginePage子类化为使用printToPdf将HTML转换为PDF,在等待javascript转换时,其性能下降完全相同。在打印之前完成。每当我自己而不是通过视图隐式生成并使用页面实例时,情况似乎都是这样。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)