diff --git a/banking_breakdown/ui/main_window.py b/banking_breakdown/ui/main_window.py
index 2db10b8..b55974f 100644
--- a/banking_breakdown/ui/main_window.py
+++ b/banking_breakdown/ui/main_window.py
@@ -41,11 +41,10 @@ class MainWindow(QMainWindow):
# Set up QTableView model
self._pandas_model = PandasModel(self)
- self._proxyModel = QSortFilterProxyModel(self)
- self._proxyModel.setSourceModel(self._pandas_model)
- self._table_view.setModel(self._proxyModel)
- self._proxyModel.setDynamicSortFilter(True)
- self._proxyModel.setSortRole(Qt.ItemDataRole.EditRole)
+ self._proxy_model = QSortFilterProxyModel(self)
+ self._proxy_model.setSourceModel(self._pandas_model)
+ self._table_view.setModel(self._proxy_model)
+ self._proxy_model.setSortRole(Qt.ItemDataRole.EditRole)
# Set event handlers
@@ -61,6 +60,7 @@ class MainWindow(QMainWindow):
header.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
header.customContextMenuRequested.connect(
self._handle_header_right_click)
+ header.sectionClicked.connect(self._handle_header_left_click)
self._list_widget.itemSelectionChanged.connect(
self._handle_list_selection_changed)
@@ -110,6 +110,9 @@ class MainWindow(QMainWindow):
def _update_categories_from_dataframe(self):
df = self._pandas_model.get_dataframe()
+ if 'category' not in df.columns:
+ df['category'] = [' '] * len(df.index)
+
df_categories = df['category'].unique()
current_categories = [self._list_widget.item(x).text() for x
in range(self._list_widget.count())]
@@ -154,6 +157,11 @@ class MainWindow(QMainWindow):
# Event handlers
#
+ def _handle_header_left_click(self, logical_index):
+ self._proxy_model.sort(logical_index,
+ self._table_view.horizontalHeader()
+ .sortIndicatorOrder())
+
def _handle_header_right_click(self, pos):
column = self._table_view.horizontalHeader().logicalIndexAt(pos)
@@ -185,10 +193,15 @@ class MainWindow(QMainWindow):
f"Are you sure you want to delete"
f" category '{selected_item.text()}'?")
+ df = self._pandas_model.get_dataframe()
+
+ if 'category' not in df.columns:
+ df['category'] = [' '] * len(df.index)
+
if button == QMessageBox.StandardButton.Yes:
- self._list_widget.takeItem(self._list_widget.row(selected_item))
- df = self.get_statement_data()
df.loc[df['category'] == selected_item.text(), 'category'] = ' '
+ self._list_widget.takeItem(self._list_widget.row(selected_item))
+ self._pandas_model.set_dataframe(df)
def _handle_clear_click(self):
self._assign_category(' ')
@@ -201,7 +214,6 @@ class MainWindow(QMainWindow):
df = self._pandas_model.get_dataframe()
df.loc[row_indices, 'category'] = category
-
self._pandas_model.set_dataframe(df)
def _handle_apply_click(self):
diff --git a/banking_breakdown/ui/pandas_model.py b/banking_breakdown/ui/pandas_model.py
index 9d703c1..f8371bf 100644
--- a/banking_breakdown/ui/pandas_model.py
+++ b/banking_breakdown/ui/pandas_model.py
@@ -1,7 +1,7 @@
import numpy
import pandas as pd
from PyQt6 import QtCore
-from PyQt6.QtCore import Qt, QModelIndex
+from PyQt6.QtCore import Qt, QModelIndex, QSortFilterProxyModel
def _get_str_dataframe(df: pd.DataFrame) -> pd.DataFrame:
diff --git a/res/main_window.ui b/res/main_window.ui
index d6a7858..2a2b799 100644
--- a/res/main_window.ui
+++ b/res/main_window.ui
@@ -127,8 +127,11 @@
QAbstractItemView::SelectRows
- true
+ false
+
+ true
+
true