我可以在QTableView中加载CSV文件并将其写入,但是,我希望能够调整此代码,以便能够在两个单独的表视图中为两个不同的CSV文件执行此操作,并且使用QTabWidget的两个选项卡
import sys
import csv
import fileinput
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class MyWindow(QWidget):
def __init__(self, fileName, parent=None):
super(MyWindow, self).__init__(parent)
MyWindow.setGeometry(self, 0,0,800,420)
self.fileName = fileName
self.model = QStandardItemModel(self)
self.tableView = QTableView(self)
self.tableView.setModel(self.model)
self.tableView.horizontalHeader().setStretchLastSection(True)
self.pushButtonLoad = QPushButton(self)
self.pushButtonLoad.setText("Load Csv File!")
self.pushButtonLoad.clicked.connect(self.on_pushButtonLoad_clicked)
self.pushButtonWrite = QPushButton(self)
self.pushButtonWrite.setText("Write Csv File!")
self.pushButtonWrite.clicked.connect(self.on_pushButtonWrite_clicked)
self.layoutVertical = 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 = [
QStandardItem(field)
for field in row
]
self.model.appendRow(items)
#self.model.layoutChanged.emit()
def writeCsv(self, fileName):
with open(fileName, "w") as fileOutput:
writer = csv.writer(fileOutput, lineterminator='\n')
print('rowCount->', self.model.rowCount())
for rowNumber in range(self.model.rowCount()):
fields = [
self.model.data(
self.model.index(rowNumber, columnNumber),
Qt.DisplayRole
)
for columnNumber in range(self.model.columnCount())
]
print('fields->', fields)
writer.writerow(fields)
@pyqtSlot()
def on_pushButtonWrite_clicked(self):
self.writeCsv(self.fileName)
self.model.layoutChanged.emit()
@pyqtSlot()
def on_pushButtonLoad_clicked(self):
self.loadCsv(self.fileName)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
app.setApplicationName('MyWindow')
main = MyWindow("C:\Qt\csv.csv")
main.show()
sys.exit(app.exec_())
我知道如何将两个表视图添加到单独的选项卡小部件中,它只是加载和写入按钮处理两个单独的csv文件的方法
在您的示例中,每个选项卡中应该有两个相同类型的小部件,因此创建自定义类是一个不错的选择。另一方面,最好通过对话获取CSV,因为如果要加载另一个文件,就必须修改代码,用户不应该这样做。最后,我将创建一个QMainWindow,QTabWidget将放置在其中,并在每个选项卡中设置自定义小部件
相关问题 更多 >
编程相关推荐