如何修改PyQt5代码实现默认或自动横向打印?
PyQt5 设置默认横向打印的解决方案
当然有办法实现横向打印啦!你可以通过两种常见的方式来配置:一种是让打印/预览对话框默认选中横向选项(用户仍可手动切换回纵向),另一种是强制所有打印操作使用横向。下面是具体的代码修改方案:
方案一:让打印对话框默认使用横向
修改你的handlePrint和handlePreview方法,在创建打印机实例时直接设置打印方向,这样对话框打开时就会默认选中横向:
def handlePrint(self): # 创建打印机实例并设置默认方向为横向 printer = QtPrintSupport.QPrinter() printer.setOrientation(QtPrintSupport.QPrinter.Landscape) dialog = QtPrintSupport.QPrintDialog(printer, self) if dialog.exec_() == QtWidgets.QDialog.Accepted: self.handlePaintRequest(dialog.printer()) def handlePreview(self): # 预览对话框同样设置默认横向 printer = QtPrintSupport.QPrinter() printer.setOrientation(QtPrintSupport.QPrinter.Landscape) dialog = QtPrintSupport.QPrintPreviewDialog(printer, self) dialog.paintRequested.connect(self.handlePaintRequest) dialog.exec_()
方案二:强制所有打印操作使用横向
如果你希望不管用户怎么设置,都固定用横向打印,可以直接在handlePaintRequest方法里设置打印机方向:
def handlePaintRequest(self, printer): # 强制将打印方向设为横向 printer.setOrientation(QtPrintSupport.QPrinter.Landscape) document = self.makeTableDocument() document.print_(printer)
这种方式下,即使用户在打印对话框里切换回纵向,最终打印出来的还是横向内容,适合需要固定打印格式的场景。
完整修改后的代码
这里是整合了方案一的完整代码,你可以直接替换原来的代码测试:
from PyQt5 import QtWidgets, QtCore, QtPrintSupport, QtGui class Window(QtWidgets.QWidget): def __init__(self): QtWidgets.QWidget.__init__(self) self.setWindowTitle(self.tr('Document Printer')) self.table = QtWidgets.QTableWidget(200, 5, self) for row in range(self.table.rowCount()): for col in range(self.table.columnCount()): item = QtWidgets.QTableWidgetItem('(%d, %d)' % (row, col)) item.setTextAlignment(QtCore.Qt.AlignCenter) self.table.setItem(row, col, item) self.table.setHorizontalHeaderLabels( 'SKU #|NAME|DESCRIPTION|QUANTITY|PRICE'.split('|')) self.buttonPrint = QtWidgets.QPushButton('Print', self) self.buttonPrint.clicked.connect(self.handlePrint) self.buttonPreview = QtWidgets.QPushButton('Preview', self) self.buttonPreview.clicked.connect(self.handlePreview) layout = QtWidgets.QGridLayout(self) layout.addWidget(self.table, 0, 0, 1, 2) layout.addWidget(self.buttonPrint, 1, 0) layout.addWidget(self.buttonPreview, 1, 1) def handlePrint(self): printer = QtPrintSupport.QPrinter() printer.setOrientation(QtPrintSupport.QPrinter.Landscape) dialog = QtPrintSupport.QPrintDialog(printer, self) if dialog.exec_() == QtWidgets.QDialog.Accepted: self.handlePaintRequest(dialog.printer()) def handlePreview(self): printer = QtPrintSupport.QPrinter() printer.setOrientation(QtPrintSupport.QPrinter.Landscape) dialog = QtPrintSupport.QPrintPreviewDialog(printer, self) dialog.paintRequested.connect(self.handlePaintRequest) dialog.exec_() def handlePaintRequest(self, printer): document = self.makeTableDocument() document.print_(printer) def makeTableDocument(self): document = QtGui.QTextDocument() cursor = QtGui.QTextCursor(document) rows = self.table.rowCount() columns = self.table.columnCount() table = cursor.insertTable(rows + 1, columns) format = table.format() format.setHeaderRowCount(1) table.setFormat(format) format = cursor.blockCharFormat() format.setFontWeight(QtGui.QFont.Bold) for column in range(columns): cursor.setCharFormat(format) cursor.insertText( self.table.horizontalHeaderItem(column).text()) cursor.movePosition(QtGui.QTextCursor.NextCell) for row in range(rows): for column in range(columns): cursor.insertText( self.table.item(row, column).text()) cursor.movePosition(QtGui.QTextCursor.NextCell) return document if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) window = Window() window.resize(640, 480) window.show() sys.exit(app.exec_())
原理很简单:QPrinter的setOrientation方法可以接受QtPrintSupport.QPrinter.Landscape(横向)或QtPrintSupport.QPrinter.Portrait(纵向)参数,以此来控制打印方向。
内容的提问来源于stack exchange,提问作者Eqzt111
相关产品推荐
相关产品推荐

