pyqt-用csv数据填充QTableWidget
发布于 2021-01-29 19:18:00
我有一个QTableWidget,我将此表中的数据导出到一个csv文件中。但是现在,我想打开一个现有的csv文件,并使用此数据填充我的表。我该怎么做?
这是我的导出代码,我想要一个“填充”代码,我真的不知道该怎么做。.我知道如何读取一个csv,但我不知道如何用此csv数据填充我的表。
def export(self):
nomeArquivo = "nomeArquivo"
filename = unicode(QFileDialog.getSaveFileName(self, "Document - Choose Export File", nomeArquivo+".csv"))
if not filename:
return
self.model.sort()
fh = None
try:
fh = QFile(filename)
if not fh.open(QIODevice.WriteOnly):
raise IOError, unicode(fh.errorString())
stream = QTextStream(fh)
stream.setCodec("UTF-8")
for row in range(self.model.rowCount()):
TSentence = self.model.data(
self.model.index(row, TABELA.SENTENCE)).toString()
TIrony = self.model.data(
self.model.index(row, TABELA.IRONY)).toString()
stream << "\""<< TSentence << "\"" << ";" << "\""<< TIrony <<"\"" <<"\n"
except (IOError, OSError), e:
QMessageBox.warning(self, "Text - Error",
"Failed to export: %s" % e)
finally:
if fh:
fh.close()
QMessageBox.warning(self, "Text - Export",
"Successfully exported text to %s" % filename)
关注者
0
被浏览
59
1 个回答
-
看起来您可以在
csv
此处使用该模块:#!/usr/bin/env python #-*- coding:utf-8 -*- import csv import sip sip.setapi('QString', 2) sip.setapi('QVariant', 2) from PyQt4 import QtGui, QtCore class MyWindow(QtGui.QWidget): def __init__(self, fileName, parent=None): super(MyWindow, self).__init__(parent) self.fileName = fileName self.model = QtGui.QStandardItemModel(self) self.tableView = QtGui.QTableView(self) self.tableView.setModel(self.model) self.tableView.horizontalHeader().setStretchLastSection(True) self.pushButtonLoad = QtGui.QPushButton(self) self.pushButtonLoad.setText("Load Csv File!") self.pushButtonLoad.clicked.connect(self.on_pushButtonLoad_clicked) self.pushButtonWrite = QtGui.QPushButton(self) self.pushButtonWrite.setText("Write Csv File!") self.pushButtonWrite.clicked.connect(self.on_pushButtonWrite_clicked) self.layoutVertical = QtGui.QVBoxLayout(self) self.layoutVertical.addWidget(self.tableView) self.layoutVertical.addWidget(self.pushButtonLoad) self.layoutVertical.addWidget(self.pushButtonWrite) def loadCsv(self, fileName): with open(fileName, "rb") as fileInput: for row in csv.reader(fileInput): items = [ QtGui.QStandardItem(field) for field in row ] self.model.appendRow(items) def writeCsv(self, fileName): with open(fileName, "wb") as fileOutput: writer = csv.writer(fileOutput) for rowNumber in range(self.model.rowCount()): fields = [ self.model.data( self.model.index(rowNumber, columnNumber), QtCore.Qt.DisplayRole ) for columnNumber in range(self.model.columnCount()) ] writer.writerow(fields) @QtCore.pyqtSlot() def on_pushButtonWrite_clicked(self): self.writeCsv(self.fileName) @QtCore.pyqtSlot() def on_pushButtonLoad_clicked(self): self.loadCsv(self.fileName) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) app.setApplicationName('MyWindow') main = MyWindow("/path/to/MyFile.csv") main.show() sys.exit(app.exec_())
PyQt5版本:
#!/usr/bin/env python #-*- coding:utf-8 -*- import csv from PyQt5 import QtCore, QtGui, QtWidgets class MyWindow(QtWidgets.QWidget): def __init__(self, fileName, parent=None): super(MyWindow, self).__init__(parent) self.fileName = fileName self.model = QtGui.QStandardItemModel(self) self.tableView = QtWidgets.QTableView(self) self.tableView.setModel(self.model) self.tableView.horizontalHeader().setStretchLastSection(True) self.pushButtonLoad = QtWidgets.QPushButton(self) self.pushButtonLoad.setText("Load Csv File!") self.pushButtonLoad.clicked.connect(self.on_pushButtonLoad_clicked) self.pushButtonWrite = QtWidgets.QPushButton(self) self.pushButtonWrite.setText("Write Csv File!") self.pushButtonWrite.clicked.connect(self.on_pushButtonWrite_clicked) self.layoutVertical = QtWidgets.QVBoxLayout(self) self.layoutVertical.addWidget(self.tableView) self.layoutVertical.addWidget(self.pushButtonLoad) self.layoutVertical.addWidget(self.pushButtonWrite) def loadCsv(self, fileName): with open(fileName, "r") as fileInput: for row in csv.reader(fileInput): items = [ QtGui.QStandardItem(field) for field in row ] self.model.appendRow(items) def writeCsv(self, fileName): with open(fileName, "w") as fileOutput: writer = csv.writer(fileOutput) for rowNumber in range(self.model.rowCount()): fields = [ self.model.data( self.model.index(rowNumber, columnNumber), QtCore.Qt.DisplayRole ) for columnNumber in range(self.model.columnCount()) ] writer.writerow(fields) @QtCore.pyqtSlot() def on_pushButtonWrite_clicked(self): self.writeCsv(self.fileName) @QtCore.pyqtSlot() def on_pushButtonLoad_clicked(self): self.loadCsv(self.fileName) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) app.setApplicationName('MyWindow') main = MyWindow("data.csv") main.show() sys.exit(app.exec_())