Я создаю таблицу внутри PyQt5 GUI, используя QTableView.У меня есть 35 строк и 5 столбцов из кадра данных панд.Прокрутка и сортировка таблицы происходит очень медленно (порядка секунд).
Я уже искал решения, но у большинства людей возникли проблемы с заполнением таблицы.Один человек предложил использовать массив numpy, но я не увидел никакого увеличения производительности.
Вот мой код:
def create_table(dataframe):
table = QTableView()
tm = TableModel(dataframe)
table.setModel(tm)
table.setSelectionBehavior(QAbstractItemView.SelectRows)
table.resizeColumnsToContents()
table.resizeRowsToContents()
table.setSortingEnabled(True)
return table
class TableModel(QtCore.QAbstractTableModel):
def __init__(self, data, parent=None):
QtCore.QAbstractTableModel.__init__(self, parent)
self._data = data
def rowCount(self, parent=None):
return len(self._data.values)
def columnCount(self, parent=None):
return self._data.columns.size
def data(self, index, role=QtCore.Qt.DisplayRole):
if index.isValid():
if role == QtCore.Qt.DisplayRole:
return str(self._data.values[index.row()][index.column()])
return None
def headerData(self, rowcol, orientation, role):
if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
return self._data.columns[rowcol]
if orientation == QtCore.Qt.Vertical and role == QtCore.Qt.DisplayRole:
return self._data.index[rowcol]
return None
def flags(self, index):
flags = super(self.__class__, self).flags(index)
flags |= QtCore.Qt.ItemIsEditable
flags |= QtCore.Qt.ItemIsSelectable
flags |= QtCore.Qt.ItemIsEnabled
flags |= QtCore.Qt.ItemIsDragEnabled
flags |= QtCore.Qt.ItemIsDropEnabled
return flags
def sort(self, Ncol, order):
"""Sort table by given column number.
"""
try:
self.layoutAboutToBeChanged.emit()
self._data = self._data.sort_values(self._data.columns[Ncol], ascending=not order)
self.layoutChanged.emit()
except Exception as e:
print(e)
table = create_table(dataframe)
Есть один вопрос, который я нашел здесь Медленнопрокрутка с помощью QTableView на другом компьютере , где у пользователя есть похожая проблема, и он / она обнаружил, что «QTableView обновляет элементы при каждой прокрутке / появлении окна, что, очевидно, является источником проблемы».Однако я не знаю, имеет ли моя таблица ту же проблему, что и эта.
Как можно ускорить прокрутку и сортировку для моей таблицы?Каковы источники проблемы?