如何打印QTableView

我有一个连接到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,然后打印出来。

以下演示使用了一个简单的文本表,但是可以使用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_())

以上是 如何打印QTableView 的全部内容, 来源链接: utcz.com/qa/414793.html

回到顶部