<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[How do I create a print preview of QWebEngineView in pyqt6?]]></title><description><![CDATA[<p dir="auto">I'm trying to create a print preview or print dialog of a QWebEngineView but I can't get it to work.</p>
<p dir="auto">Here's my code in pyqt6.2.3 - python-3.9.7 (need to print aftrer 7 seconds):</p>
<pre><code>from PyQt6.QtCore import (QCoreApplication, QEventLoop, QObject, QPointF, Qt,
                       QUrl, pyqtSlot)
from PyQt6.QtGui import QKeySequence, QPainter, QShortcut
from PyQt6.QtPrintSupport import QPrintDialog, QPrinter, QPrintPreviewDialog, QAbstractPrintDialog
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtWidgets import QApplication, QDialog, QLabel, QProgressBar, QProgressDialog, QWidget
 
 
class PrintHandler(QObject):
    def __init__(self, parent = None):
        super().__init__(parent)
        self.m_page = None
        self.m_inPrintPreview = False
 
    def setPage(self, page):
        assert not self.m_page
        self.m_page = page
        self.m_page.printRequested.connect(self.printPreview)
 
    @pyqtSlot()
    def print(self):
        printer = QPrinter(QPrinter.PrinterMode.HighResolution)
        dialog = QPrintDialog(printer, self.m_page.view())
        if dialog.exec() != QDialog.accepted:
            return
        self.printDocument(printer)
 
    @pyqtSlot()
    def printPreview(self):
        if not self.m_page:
            return
        if self.m_inPrintPreview:
            return
        self.m_inPrintPreview = True
        printer = QPrinter()
        preview = QPrintPreviewDialog(printer)
        preview.paintRequested.connect(self.printDocument)
        preview.exec()
        self.m_inPrintPreview = False
 
    @pyqtSlot(QPrinter)
    def printDocument(self, printer):
        loop = QEventLoop()
        result = False
 
        def printPreview(success):
            nonlocal result
            result = success
            loop.quit()
        progressbar = QProgressDialog(self.m_page.view())
        progressbar.findChild(QProgressBar).setTextVisible(False)
        progressbar.setLabelText("Wait please...")
        progressbar.setRange(0, 0)
        progressbar.show()
        progressbar.canceled.connect(loop.quit)
        self.m_page.print(printer, printPreview)
        loop.exec_()
        progressbar.close()
        if not result:
            painter = QPainter()
            if painter.begin(printer):
                font = painter.font()
                font.setPixelSize(20)
                painter.setFont(font)
                painter.drawText(QPointF(10, 25), "Could not generate print preview.")
                painter.end()
 
 
def main():
    import sys
 
    # QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
    app = QApplication(sys.argv)
    app.setApplicationName("Previewer")
 
 
    view = QWebEngineView()
    view.setUrl(QUrl("https://forum.qt.io/category/58/qt-for-python"))
    view.resize(1024, 750)
    view.show()
 
 
    # printPreviewShortCut = QShortcut(QKeySequence(Qt.CTRL + Qt.Key_P), view)
    # printShortCut = QShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_P), view)
 
 
 
    import threading
    def gfg():
        print("1234")
        handler = PrintHandler()
        handler.setPage(view.page())
        handler.print()
        # handler.printPreview()
 
    timer = threading.Timer(7.0, gfg)
    timer.start()
 
    sys.exit(app.exec())
 
 
if __name__ == "__main__":
    main()

</code></pre>
]]></description><link>https://forum.qt.io/topic/138435/how-do-i-create-a-print-preview-of-qwebengineview-in-pyqt6</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 17:28:53 GMT</lastBuildDate><atom:link href="https://forum.qt.io/topic/138435.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 07 Aug 2022 22:53:20 GMT</pubDate><ttl>60</ttl></channel></rss>