Skip to main content
 首页 » 编程设计

python之QWebEngineView:显示加载进度

2024年08月15日55kerrycode

我在 PyQt5 和 Python 3.6 中使用 QWebEngineView 小部件。 我想在加载页面时显示进度。出于演示目的,我只是使用打印语句来执行此操作(稍后我想让进度条小部件出现、显示进度并在完成后消失)。

我连接到事件 loadStarted、loadProgress、loadFinished。

代码如下所示(self.browser 是 QWebEngineView 小部件):

def loadStartedHandler(self): 
    print(time.time(), ": load started") 
 
def loadProgressHandler(self, prog): 
    print(time.time(), ":load progress", prog) 
 
def loadFinishedHandler(self): 
    print(time.time(), ": load finished") 
 
# .... 
 
self.browser.loadStarted.connect(lambda: self.loadStartedHandler()) 
self.browser.loadProgress.connect(lambda: self.loadProgressHandler(42)) 
self.browser.loadFinished.connect(lambda: self.loadFinishedHandler()) 

当然,现在我想获取 loadProgress 事件的实际进度值,而不是数字 42。我如何获得这个?

抱歉,如果这个问题很愚蠢。我是一个新手,我无法将它从 C++ 文档翻译成 Python。 (不幸的是,我找不到适合 Qt 的 Python 文档。)

请您参考如下方法:

不需要传递 lambda,您可以使用 new connection syntax 直接连接它:

def loadStartedHandler(self): 
    print(time.time(), ": load started") 
 
def loadProgressHandler(self, prog): 
    print(time.time(), ":load progress", prog) 
 
def loadFinishedHandler(self): 
    print(time.time(), ": load finished") 
 
   .... 
 
    self.browser.loadStarted.connect(self.loadStartedHandler) 
    self.browser.loadProgress.connect(self.loadProgressHandler) 
    self.browser.loadFinished.connect(self.loadFinishedHandler) 

例子:

import sys 
import time 
 
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets 
 
 
class Widget(QtWidgets.QWidget): 
    def __init__(self): 
        super(Widget, self).__init__() 
        lay = QtWidgets.QVBoxLayout(self) 
        self.browser = QtWebEngineWidgets.QWebEngineView() 
        lay.addWidget(self.browser) 
        self.browser.setUrl(QtCore.QUrl("https://www.google.com")) 
        self.browser.loadStarted.connect(self.loadStartedHandler) 
        self.browser.loadProgress.connect(self.loadProgressHandler) 
        self.browser.loadFinished.connect(self.loadFinishedHandler) 
 
    @QtCore.pyqtSlot() 
    def loadStartedHandler(self): 
        print(time.time(), ": load started") 
 
    @QtCore.pyqtSlot(int) 
    def loadProgressHandler(self, prog): 
        print(time.time(), ":load progress", prog) 
 
    @QtCore.pyqtSlot() 
    def loadFinishedHandler(self): 
        print(time.time(), ": load finished") 
 
if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    view = Widget() 
    view.show() 
    sys.exit(app.exec_())