如何防止打印按钮在打印后关闭 QPrintPreviewDialog

How to prevent Print Button to close QPrintPreviewDialog after printing

当我运行这个简单的程序...

import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtPrintSupport import *

class Window(QWidget):
    def __init__(self):
        super(Window, self).__init__()

        html = "<html><body>"
        for i in range(1000):
            html += "<p>{i}</p>".format(i=i)
        html += "</body></html>"

        self.document = QTextDocument()
        self.document.setHtml(html)

        closing_checkbox = QCheckBox("Close Print Preview dialog after first print")
        closing_checkbox.setCheckState(Qt.Checked)
        button_preview = QPushButton('Preview', self)
        button_preview.clicked.connect(self.handlePreview)
        layout = QVBoxLayout(self)
        layout.addWidget(closing_checkbox)
        layout.addWidget(button_preview)

    def handlePreview(self):
        dialog = QPrintPreviewDialog()
        dialog.paintRequested.connect(self.document.print_)
        dialog.exec_()

app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())

...单击“预览”按钮后,QPrintPreviewDialog 打开。单击工具栏上的(最右侧)打印按钮后,我选择了打印机并进行打印,QPrintPreviewDialog 关闭。我知道在大多数情况下这正是用户想要的。但是如果在某些情况下用户想要再次打印相同的文档,但是在不同的网络打印机上怎么办。或者例如他想先打印第 1-2 页,然后(同一个 QPrintPreviewDialog 仍然打开)他想打印第 9-10 页。

当我清除 closing_checkbox 时,我希望 QPrintPreviewDialog 在单击“打印”按钮后不关闭。热吗?我尝试继承 QPrintPreviewDialog 并实现 accept()、reject()、closeEvent(),但没有成功。

一种可能的解决方案是覆盖 accept() 方法:

class PrintPreviewDialog(QPrintPreviewDialog):
    def accept(self):
        pass
dialog = PrintPreviewDialog()