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 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    看起来您可以在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_())
    


知识点
面圈网VIP题库

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

去下载看看