簡體   English   中英

QWebEngineView().loadFinished 后如何等待腳本完成?

[英]How to wait for scripts to finish after QWebEngineView().loadFinished?

我正在嘗試使用 PyQt5 將 HTML 文件呈現為 PDF。 不幸的是,我的 HTML 頁面加載緩慢,但我找不到等待它加載的方法。 我的問題是這個; 恢復執行后,如何讓 PyQt5 等待幾秒鍾? 還是有更好的方法來等待 JS 腳本執行?

app = QtWidgets.QApplication(sys.argv)
loader = QtWebEngineWidgets.QWebEngineView()
loader.setZoomFactor(1)
loader.page().pdfPrintingFinished.connect(loader.close)
loader.load(QtCore.QUrl(url))

def emit_pdf(finished):
    loader.page().printToPdf("test.pdf")
    
loader.loadFinished.connect(emit_pdf)
    
app.exec()

我嘗試使用 QTimer 但無法使其工作。 這是它的樣子。

app = QtWidgets.QApplication(sys.argv)
loader = QtWebEngineWidgets.QWebEngineView()
loader.setZoomFactor(1)
loader.page().pdfPrintingFinished.connect(loader.close)
loader.load(QtCore.QUrl(url))

timer = QtCore.QTimer()
timer.setInterval(2000)

def run_emit():
    loader.loadFinished.connect(emit_pdf)

timer.timeout.connect(run_emit)
timer.start()

def emit_pdf(finished):
    timer.stop()
    loader.page().printToPdf("test.pdf")
app.exec()

最終產品沒有顯式等待。 代替使用QTimer.start()QTimer.stop() ,帶有 lambda 函數的QTimer.singleShot()將起作用。

def emit_pdf(finished):
    QTimer.singleShot(2000, lambda: loader.page().printToPdf("test.pdf"))

app.exec()

我添加了這個以防解決方案注釋丟失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM