电脑没有安装execl qt实现将csv格式的文件导入到qtableview中
时间: 2024-03-30 19:37:01 浏览: 22
可以使用Qt自带的QStandardItemModel来读取csv文件,并将其转换为QTableView中的数据模型。以下是示例代码:
```python
from PyQt5.QtWidgets import QTableView, QFileDialog, QApplication, QMainWindow, QAbstractItemView, QHeaderView, QSizePolicy, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QMessageBox, QLineEdit, QProgressBar, QGridLayout, QStyleFactory, QStyle, QComboBox, QSpinBox, QDoubleSpinBox, QCheckBox, QRadioButton, QButtonGroup, QSlider, QLCDNumber, QSpacerItem, QAction, QMenu, QMenuBar, QDialog, QGroupBox, QFileDialog, QTableWidget, QTableWidgetItem, QHeaderView
from PyQt5.QtCore import Qt, QAbstractTableModel, QVariant, QModelIndex
from PyQt5.QtGui import QColor, QBrush, QIcon
import csv
class CsvTableModel(QAbstractTableModel):
def __init__(self, parent=None, *args):
super(CsvTableModel, self).__init__(parent, *args)
self._data = []
def rowCount(self, parent=QModelIndex()):
return len(self._data)
def columnCount(self, parent=QModelIndex()):
if self.rowCount() > 0:
return len(self._data[0])
else:
return 0
def data(self, index, role=Qt.DisplayRole):
if index.isValid():
if role == Qt.DisplayRole:
return QVariant(self._data[index.row()][index.column()])
if role == Qt.BackgroundRole:
if index.row() % 2 == 0:
return QVariant(QBrush(QColor(240, 240, 240)))
else:
return QVariant(QBrush(QColor(255, 255, 255)))
return QVariant()
def headerData(self, section, orientation, role):
if role == Qt.DisplayRole:
if orientation == Qt.Horizontal:
return QVariant("Column %d" % (section+1))
else:
return QVariant("Row %d" % (section+1))
def readCsvFile(self, fileName):
with open(fileName, newline='', encoding='utf-8') as csvFile:
reader = csv.reader(csvFile, delimiter=',', quotechar='|')
for row in reader:
self._data.append(row)
self.layoutChanged.emit()
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("Csv Viewer")
self.setGeometry(100, 100, 800, 600)
self.setWindowIcon(QIcon('icon.png'))
self.tableView = QTableView()
self.tableView.setModel(CsvTableModel(self))
self.tableView.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows)
self.tableView.setAlternatingRowColors(True)
self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.tableView.verticalHeader().setVisible(False)
self.setCentralWidget(self.tableView)
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
openFileAction = QAction('Open', self)
openFileAction.setShortcut('Ctrl+O')
openFileAction.triggered.connect(self.openFile)
fileMenu.addAction(openFileAction)
exitAction = QAction('Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.triggered.connect(self.close)
fileMenu.addAction(exitAction)
def openFile(self):
fileName, _ = QFileDialog.getOpenFileName(self, "Open CSV File", "", "CSV Files (*.csv);;All Files (*)")
if fileName:
model = self.tableView.model()
model.readCsvFile(fileName)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
请将代码中的`icon.png`替换为你实际要使用的图标路径。在窗口中选择File->Open菜单可以打开csv文件。