0

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

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 页。

当我清除关闭复选框时,我希望 QPrintPreviewDialog 在单击打印按钮后不要关闭。这样做很热?我尝试继承 QPrintPreviewDialog 并实现 accept()、reject()、closeEvent(),但没有运气。

4

1 回答 1

1

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

class PrintPreviewDialog(QPrintPreviewDialog):
    def accept(self):
        pass
dialog = PrintPreviewDialog()
于 2021-06-06T23:32:50.457 回答