如何将 QTableWidget 作为参数传递给函数

我有导出到 excel 函数和一堆 QTableWidgets。我知道如果我为每个 tablewidget 创建每个函数是非常低效的,但是我如何将 tablewidget 作为函数的参数传递?


    def writeCsv(self):

        path, _ = QFileDialog.getSaveFileName(self, 'Save File', QDir.homePath() + "/export.csv", "CSV Files(*.csv *.txt)")

        if path:

            with open(path, 'w') as stream:

                print("saving", path)

                writer = csv.writer(stream, dialect = 'excel', delimiter = ',')

                headers = []

                for column in range(self.tableWidget_show.columnCount()):

                    header = self.tableWidget_show.horizontalHeaderItem(column)

                    if header is not None:

                        headers.append(header.text())

                    else:

                        headers.append("Column " + str(column))

                writer.writerow(headers)

                for row in range(self.tableWidget_show.rowCount()):

                    rowdata = []

                    for column in range(self.tableWidget_show.columnCount()):

                        item = self.tableWidget_show.item(row, column)

                        if item is not None:

                            rowdata.append(item.text())

                        else:

                            rowdata.append('')

                    writer.writerow(rowdata)


我想使用self.tableWidget_showpart 作为参数,这样每次当我有其他参数时我都可以更改参数Qtablewidget


交互式爱情
浏览 190回答 1
1回答

aluckdog

首先让每个函数执行最小的任务,以便调试很容易,例如在你的情况下,没有必要在那里使用 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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python