1 回答

TA貢獻1847條經驗 獲得超7個贊
首先讓每個函數執行最小的任務,以便調試很容易,例如在你的情況下,沒有必要在那里使用 QFIleDialog 來選擇文件,而只接收路徑,然后在另一個函數中進行選擇。另一方面,所使用的信息存儲在模型中而不是視圖中,因此可以通過保存模型而不是 QTableWidget 來概括它,因此您也可以將它用于任何類型的 QTableView。
def write_model_to_csv(self, model, filename):
with open(filename, "w") as stream:
writer = csv.writer(stream, dialect="excel", delimiter=",")
headers = []
for column in range(model.columnCount()):
text = model.headerData(column, Qt.Horizontal)
if text:
headers.append(text)
else:
headers.append("Column {}".format(column))
writer.writerow(headers)
for row in range(model.rowCount()):
rowdata = []
for column in range(model.columnCount()):
text = model.index(row, column).data()
if text:
rowdata.append(text)
else:
rowdata.append("")
writer.writerow(rowdata)
path, _ = QFileDialog.getSaveFileName(
self, "Save File", QDir.homePath() + "/export.csv", "CSV Files(*.csv *.txt)"
)
if path:
self.write_model_to_csv(self.tableWidget_show.model(), path)
添加回答
舉報