gpt4 book ai didi

python - 如何在 QTableWidget 中打印数据库中的数据?

转载 作者:太空宇宙 更新时间:2023-11-03 18:31:26 39 4
gpt4 key购买 nike

如何将数据库 (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 构建文档。

关于python - 如何在 QTableWidget 中打印数据库中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22327635/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com