如何打印QTableView [关闭]

发布于 2021-01-29 14:10:48

在这里很难说出要问什么。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开,
请访问帮助中心

8年前关闭。

我有一个连接到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

我找不到为此提供示例,并且我对文档的了解不多,因此希望获得一些帮助

关注者
0
被浏览
135
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    一种方法是将表内容转储到中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_())
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看