为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

交互式爱情 2023-04-25 16:22:42
我有导出到 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
查看完整描述

1 回答

?
aluckdog

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)


查看完整回答
反对 回复 2023-04-25
  • 1 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信