簡體   English   中英

在pyqt5中打印tableview或model

[英]print tableview or model in pyqt5

我正在嘗試使用 Qpr​​inter 和 QPrintPreviewDialog 打印 tableview 的內容或運行 table view 的模型,但我能得到的最好的是像這樣的空表

在此處輸入圖片說明

這是我的句柄預覽代碼

def handlePreview(self):
        dialog = QtPrintSupport.QPrintPreviewDialog()
        dialog.setFixedSize(1000,690)
        dialog.paintRequested.connect(self.handlePaintRequest)
        dialog.exec_()

nd 用於處理打印請求

def handlePaintRequest(self, printer):
        #printer = QPrinter()
        database = QSqlDatabase("QPSQL")
        database.setHostName("localhost")
        database.setDatabaseName("database")
        database.setUserName("username")
        database.setPassword("password")
        database.open()
        
        self.model_hjd = QSqlTableModel(db=database)
        self.model_hjd.setTable('transactions')

        date = str(self.dateEdit_10.text())
        date_2 = str(self.dateEdit_14.text())
        self.model_hjd.select()
        filter_ft = "date_d BETWEEN '%s' AND '%s'" % (date, date_2)
        self.model_hjd.setFilter(filter_ft)

        rows = self.model_hjd.rowCount()
        columns = self.model_hjd.columnCount()
        print (rows)
        print (columns)

        self.model_hjd =  QtGui.QStandardItemModel(self)
        #self.tableView_22.setModel(self.model_hjd)
        #self.table.setModel(self.model_hjd)

        for row in range(self.model_hjd.rowCount()):
            for column in range(self.model_hjd.columnCount()):
                myitem = self.model_hjd.item(row,column)
                if myitem is None:
                    item = QtGui.QStandardItem("")
                    self.model_hjd.setItem(row, column, item)

        document = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(document)
        #model_hjd = self.tableView_22.model_hjd()
        table = cursor.insertTable(rows, columns)
        for row in range(rows):
            for column in range(table.columns()):
                cursor.insertText(self.model_hjd.item(row, column))
                cursor.movePosition(QtGui.QTextCursor.NextCell)
            document.print_(printer)

有什么想法或打擊來解決這個問題嗎?

我找到了讓它工作的方法,但它需要更多的修正

def handlePaintRequest(self, printer):
        database = QSqlDatabase("QPSQL")
        database.setHostName("localhost")
        database.setDatabaseName("database)
        database.setUserName("user")
        database.setPassword("password")
        database.open()
        
        model_hjd = QSqlTableModel(db=database)
        model_hjd.setTable('transactions')
        
        model_hjd.setHeaderData(0, Qt.Horizontal,"id")
        model_hjd.setHeaderData(1, Qt.Horizontal,"montant")
        model_hjd.setHeaderData(2, Qt.Horizontal,"medecin")
        model_hjd.setHeaderData(3, Qt.Horizontal,"patient")
        model_hjd.setHeaderData(4, Qt.Horizontal,"acte")
        model_hjd.setHeaderData(5, Qt.Horizontal,"date")
        model_hjd.setHeaderData(6, Qt.Horizontal,"temps")

        model_hjd.setEditStrategy(QSqlTableModel.OnManualSubmit)
        
        model_hjd.removeColumns(7,1)
        #model_hjd.removeColumn(5)
        date = str(self.dateEdit_10.text())
        date_2 = str(self.dateEdit_14.text())

        self.tableView_22.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        model_hjd.setSort(6, Qt.DescendingOrder)
        self.tableView_22.setModel(model_hjd)
        model_hjd.select()
        filter_ft = "date_d BETWEEN '%s' AND '%s'" % (date, date_2)
        model_hjd.setFilter(filter_ft)

        self.model = QtGui.QStandardItemModel(self)

        item = QtGui.QStandardItem()
        self.model.appendRow(item)
        self.model.setData(self.model.index(0, 5), "", 0)
        self.tableView_22.resizeColumnsToContents()

        self.tableView_22.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)

        # Selection of columns
        self.selectionModel = self.tableView_22.selectionModel()

        self.tableView_22.setModel(model_hjd)

        document = QTextDocument()
        cursor = QTextCursor(document)
        tableFormat = QTextTableFormat()
        tableFormat.setBorder(0.2)
        tableFormat.setBorderStyle(3)
        tableFormat.setCellSpacing(0);
        tableFormat.setTopMargin(0);
        tableFormat.setCellPadding(4)
        table = cursor.insertTable(model_hjd.rowCount() + 1, model_hjd.columnCount(), tableFormat)
        ### get headers
        myheaders = []
        for i in range(0, model_hjd.columnCount()):
            myheader = model_hjd.headerData(i, Qt.Horizontal)
            cursor.insertText(myheader)
            cursor.movePosition(QTextCursor.NextCell)

        for row in range(0, model_hjd.rowCount()):
           for col in range(0, model_hjd.columnCount()):
               index = model_hjd.index( row, col )
               cursor.insertText(str(index.data()))
               cursor.movePosition(QTextCursor.NextCell)
        document.print_(printer)

結果

表視圖

在此處輸入圖片說明

#########################################

有沒有辦法修復日期和時間格式? 並將行添加到表格中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM