banking-breakdown/banking_breakdown/ui/pandas_model.py

43 lines
1.2 KiB
Python

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