当我运行这个简单的程序时......
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(),但没有运气。