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
我有一个程序可以从 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