Python 如何将QTableWidget作为函数的参数传递

Python 如何将QTableWidget作为函数的参数传递,python,pyqt5,arguments,qtablewidget,Python,Pyqt5,Arguments,Qtablewidget,我有导出到excel的功能和一堆QtableWidget。我知道,如果我为每个tablewidget生成每个函数,效率会非常低,但是如何将tablewidget作为函数的参数传递呢 def writeCsv(自): 路径,uqfiledialog.getSaveFileName(self,'Save File',QDir.homePath()+“/export.csv”,“csv文件(*.csv*.txt)”) 如果路径: 以开放(路径“w”)作为流: 打印(“保存”,路径) writer=cs

我有导出到excel的功能和一堆QtableWidget。我知道,如果我为每个tablewidget生成每个函数,效率会非常低,但是如何将tablewidget作为函数的参数传递呢

def writeCsv(自):
路径,uqfiledialog.getSaveFileName(self,'Save File',QDir.homePath()+“/export.csv”,“csv文件(*.csv*.txt)”)
如果路径:
以开放(路径“w”)作为流:
打印(“保存”,路径)
writer=csv.writer(流,方言='excel',分隔符=',')
标题=[]
对于范围内的列(self.tableWidget_show.columnCount()):
header=self.tableWidget\u show.horizontalHeaderItem(列)
如果标题不是“无”:
headers.append(header.text())
其他:
headers.append(“列”+str(列))
writer.writerow(标题)
对于范围内的行(self.tableWidget_show.rowCount()):
行数据=[]
对于范围内的列(self.tableWidget_show.columnCount()):
item=self.tableWidget\u show.item(行、列)
如果项目不是无:
rowdata.append(item.text())
其他:
rowdata.append(“”)
writer.writerow(行数据)

我想使用
self.tableWidget\u show
part作为参数,这样每当我有其他
Qtablewidget

时,我都可以更改参数。首先,让每个函数执行最小的任务,这样调试就很容易了,例如,在您的情况下,不需要使用Qfile对话框来选择文件,但只接收路径,并在另一个函数中进行选择。另一方面,所使用的信息存储在模型中而不是视图中,因此可以通过保存模型而不是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)