簡體   English   中英

在QTableWidget中如何打印數據庫中的數據?

[英]How can I print data from my database while in QTableWidget?

如何將數據庫(sqlite)中的數據打印到GUI中的表中的記事本/ word文檔中(使用相同的格式)。 這是我的GUI上代表的表的代碼。

class Table(QtGui.QDialog):
    def __init__(self):
        super(Table, self).__init__()
        with sqlite3.connect('database.db') as db:
            cursor=db.cursor()
            cursor.execute('select* from Receipt Order BY ReceiptID ASC')
            title = [cn[0] for cn in cursor.description]
            rows = [cn[0] for cn in cursor.description]
            cur=cursor.fetchall()
            layout = QtGui.QGridLayout() 
            self.table = QtGui.QTableWidget()
            self.setGeometry(500,500,500,400)
            qr = self.frameGeometry()
            cp = QtGui.QDesktopWidget().availableGeometry().center()
            qr.moveCenter(cp)
            self.move(qr.topLeft())
            self.label2=QtGui.QLabel(self)
            self.label2.setPixmap(QtGui.QPixmap('receipt_pic.jpg'))
            self.label2.setGeometry(0,0,500,400)
            self.table.setColumnCount(2)
            self.table.setHorizontalHeaderLabels(title)
            for i,row in enumerate(cur):
                self.table.insertRow(self.table.rowCount())
                for j,val in enumerate(row):
                    self.table.setItem(i, j, QtGui.QTableWidgetItem(str(val)))
            layout.addWidget(self.table, 0, 0)
            self.setLayout(layout)
            self.setWindowTitle('Receipt Table')

我希望能夠單擊一個按鈕,將此信息(將顯示為具有填充的行和列的表)復制到單獨的記事本文件或任何文本文檔中(可以將表發送到要打印的打印機) 。

直接打印表而不是使用中間文件可能會更容易。

為此,可以使用QTextDocument創建表的可打印表示形式,然后使用內置的打印對話框來完成其余操作。

因此,首先添加一些按鈕:

    ...
    layout.addWidget(self.table, 0, 0, 1, 2)
    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.addWidget(self.buttonPrint, 1, 0)
    layout.addWidget(self.buttonPreview, 1, 1)
    self.setLayout(layout)
    ...

然后是一些用於打印和打印預覽對話框的處理程序:

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 = 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

如果您喜歡保存到文件,則可以使用QTextDocument.toHtml將表轉儲為html。

打印的結果是非常基本的,但是如果您想得到更多效果,可以始終使用html / css來構建文檔。

我用這個功能

    def LoadDatabase(self):
        self.banco = sqlite3.connect ( 'Vendas.db' )
        self.cursor = banco.cursor ( )
        query = "SELECT * FROM Produtos"
        result = self.banco.execute ( query )
        self.listaprodutos.setRowCount ( 0 )
        for row_number, row_data in enumerate ( result ):
            self.listaprodutos.insertRow ( row_number )
            for colum_number, data in enumerate ( row_data ):
                self.listaprodutos.setItem ( row_number, colum_number, QtWidgets.QTableWidgetItem ( str ( data ) ) )

暫無
暫無

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

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