4

我正在使用带有 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 文档。)

4

1 回答 1

5

不需要传递 lambda,您可以使用新的连接语法直接连接它:

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_())
于 2018-06-28T07:54:37.977 回答