首页 > 解决方案 > PyQT / Pandas - 更新表格小部件数据的最快方法

问题描述

假设我有一个 pandas 数据框df(或字典),例如:

   col1  col2  col3
0     A     A     0
1     A     B     0
2     C     A     1
3     B     C     0
4     A     E     1

tableWidget还有一个有 2 列的 QTableWidget :

   col1  col2
0     A     A
1     A     B
2     C     A
3     B     C
4     A     E

通过遍历每个 QTableWidgetItem,我可以tableWidget根据数据框中的行值更新每行和单元格的颜色格式。col3例如,要更改行 where 的背景颜色col3 == 1,我可以执行以下操作:

row_count = len(data)
tableWidget.setRowCount(row_count)

for i in range(row_count):
    row = df.iloc[i]
    cell1 = row['col1']
    cell2 = row['col2']
    cell3 = row['col3']

    item = QtWidgets.QTableWidgetItem(cell1)
    if cell3 == 1:
        item.setForeground(QtGui.QColor('red'))
        tableWidget.setItem(i, 0, item)

    item = QtWidgets.QTableWidgetItem(cell2)
    if cell3 == 1:
        item.setForeground(QtGui.QColor('red'))
        tableWidget.setItem(i, 1, item)

然而,这是非常缓慢的。对于 2,000 行的数据框,更新表格小部件可能需要很长时间。有没有更快(更好)的方法来更新基于值数据集的表格小部件项目的属性,而不是循环遍历每一行和单元格?也许通过将格式值字典传递给 TableWidget?

标签: pythonqtpyqt

解决方案


推荐阅读