Как использовать браузер pyqt5 для реализации функции печати - PullRequest
0 голосов
/ 14 марта 2020

когда я использую браузер pyqt5 для посещения определенных веб-страниц c, на этих страницах есть кнопка печати, но когда я нажимаю эту кнопку печати, браузер не имеет ответа. В браузере Firefox после нажатия кнопки печати, отображается предпросмотр печати, и я могу выбрать принтер.

1 Ответ

0 голосов
/ 14 марта 2020

Согласно этому предварительный просмотр печати еще не доступен для QtWebEngine, поэтому вы можете печатать только напрямую.

Чтобы перехватить запрос на печать страницы, вам необходимо подключить printRequested() сигнал.

class PrintTest(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(PrintTest, self).__init__(parent)
        layout = QtWidgets.QHBoxLayout(self)
        self.view = QtWebEngineWidgets.QWebEngineView()
        layout.addWidget(self.view)
        self.page = QtWebEngineWidgets.QWebEnginePage(self)
        self.view.setPage(self.page)
        self.page.printRequested.connect(self.printRequested)
        # load a page that has a print request
        self.view.load(QtCore.QUrl(
            "https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_print"))

    def printRequested(self):
        defaultPrinter = QtPrintSupport.QPrinter(
            QtPrintSupport.QPrinterInfo.defaultPrinter())
        dialog = QtPrintSupport.QPrintDialog(defaultPrinter, self)
        if dialog.exec():
            # printer object has to be persistent
            self._printer = dialog.printer()
            self.page.print(self._printer, self.printResult)

    def printResult(self, success):
        if success:
            QtWidgets.QMessageBox.information(self, 'Print completed', 
                'Printing has been completed!', QtWidgets.QMessageBox.Ok)
        else:
            QtWidgets.QMessageBox.warning(self, 'Print failed', 
                'Printing has failed!', QtWebEngineWidgets.QMessageBox.Ok)
            self.printRequested()
        del self._printer
...