我有一个连接到mysql数据库并在QTableView中显示查询结果的Python和PySide应用程序。我需要打印表视图的内容。这是一些代码:
self.db_table = QtGui.QTableView(self) self.model = QtSql.QSqlQueryModel() self.model.setQuery("SELECT * FROM simpsons") self.model.setHeaderData(1, QtCore.Qt.Horizontal, self.tr("First Name")) self.model.setHeaderData(2, QtCore.Qt.Horizontal, self.tr("Last Name")) self.db_table.setModel(self.model) self.print_btn = QtGui.QPushButton("Print") self.print_btn.clicked.connect(self.print_btn_clicked) def print_btn_clicked(self): printDialog = QtGui.QPrintDialog(self.printer, self) if printDialog.exec_() == QtGui.QDialog.Accepted: #printing code
我找不到为此提供示例,并且我对文档的了解不多,因此希望获得一些帮助
一种方法是将表内容转储到中QTextDocument,然后打印出来。
QTextDocument
以下演示使用了一个简单的文本表,但是可以使用html来获取更复杂的格式:
from PyQt4 import QtGui, QtCore class Window(QtGui.QWidget): def __init__(self, rows, columns): QtGui.QWidget.__init__(self) self.table = QtGui.QTableView(self) model = QtGui.QStandardItemModel(rows, columns, self.table) for row in range(rows): for column in range(columns): item = QtGui.QStandardItem('(%d, %d)' % (row, column)) item.setTextAlignment(QtCore.Qt.AlignCenter) model.setItem(row, column, item) self.table.setModel(model) self.buttonPrint = QtGui.QPushButton('Print', self) self.buttonPrint.clicked.connect(self.handlePrint) self.buttonPreview = QtGui.QPushButton('Preview', self) self.buttonPreview.clicked.connect(self.handlePreview) layout = QtGui.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): dialog = QtGui.QPrintDialog() if dialog.exec_() == QtGui.QDialog.Accepted: self.handlePaintRequest(dialog.printer()) def handlePreview(self): dialog = QtGui.QPrintPreviewDialog() dialog.paintRequested.connect(self.handlePaintRequest) dialog.exec_() def handlePaintRequest(self, printer): document = QtGui.QTextDocument() cursor = QtGui.QTextCursor(document) model = self.table.model() table = cursor.insertTable( model.rowCount(), model.columnCount()) for row in range(table.rows()): for column in range(table.columns()): cursor.insertText(model.item(row, column).text()) cursor.movePosition(QtGui.QTextCursor.NextCell) document.print_(printer) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = Window(25, 2) window.resize(300, 400) window.show() sys.exit(app.exec_())