PyQt QTableView 在滚动大型数据集时速度过慢

PyQt QTableView prohibitively slow when scrolling with large data sets

我有一个程序可以从 csv 文件加载配置文件并在 table 中显示数据。将 pandas 数据框加载到 table 的速度很快,因为我使用了 QAbstractTableModel 的自定义模型实现,但调整 QTableView 小部件的大小非常慢。

如何使调整大小和滚动更顺畅?

好吧,我最终修改了我使用 numpy 制作的自定义 table 模型,现在速度非常快。

2020 年 2 月 22 日更新 从 Pandas 1.0.1 开始工作:

使用这个 table 型号:

import numpy as np

class PandasModel(QtCore.QAbstractTableModel):
    """
    Class to populate a table view with a pandas dataframe
    """
    def __init__(self, data, parent=None):
        QtCore.QAbstractTableModel.__init__(self, parent)
        self._data = np.array(data.values)
        self._cols = data.columns
        self.r, self.c = np.shape(self._data)

    def rowCount(self, parent=None):
        return self.r

    def columnCount(self, parent=None):
        return self.c

    def data(self, index, role=QtCore.Qt.DisplayRole):
        if index.isValid():
            if role == QtCore.Qt.DisplayRole:
                return str(self._data[index.row(),index.column()])
        return None


    def headerData(self, p_int, orientation, role):
        if role == QtCore.Qt.DisplayRole:
            if orientation == QtCore.Qt.Horizontal:
                return self._cols[p_int]
            elif orientation == QtCore.Qt.Vertical:
                return p_int
        return None