import pandas as pd from PyQt6 import QtCore from PyQt6.QtCore import Qt class PandasModel(QtCore.QAbstractTableModel): def __init__(self, df: pd.DataFrame, parent=None): QtCore.QAbstractTableModel.__init__(self, parent) self._data = df self._horizontalHeaders = list(df.columns) # Overloaded functions 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=Qt.ItemDataRole.DisplayRole): if not index.isValid(): return QtCore.QVariant() if role != Qt.ItemDataRole.DisplayRole: return QtCore.QVariant() item = self._data.iloc[index.row(), index.column()] return QtCore.QVariant(str(item)) def headerData(self, section, orientation, role=Qt.ItemDataRole.DisplayRole): if not ((orientation == Qt.Orientation.Horizontal) and (role == Qt.ItemDataRole.DisplayRole)): return super().headerData(section, orientation, role) return self._horizontalHeaders[section] # Other functions def get_dataframe(self): return self._data