Fix delete category

This commit is contained in:
Andreas Tsouchlos 2024-01-05 13:12:42 +01:00
parent 6a497c8575
commit be3f3b604e
3 changed files with 25 additions and 10 deletions

View File

@ -41,11 +41,10 @@ class MainWindow(QMainWindow):
# Set up QTableView model # Set up QTableView model
self._pandas_model = PandasModel(self) self._pandas_model = PandasModel(self)
self._proxyModel = QSortFilterProxyModel(self) self._proxy_model = QSortFilterProxyModel(self)
self._proxyModel.setSourceModel(self._pandas_model) self._proxy_model.setSourceModel(self._pandas_model)
self._table_view.setModel(self._proxyModel) self._table_view.setModel(self._proxy_model)
self._proxyModel.setDynamicSortFilter(True) self._proxy_model.setSortRole(Qt.ItemDataRole.EditRole)
self._proxyModel.setSortRole(Qt.ItemDataRole.EditRole)
# Set event handlers # Set event handlers
@ -61,6 +60,7 @@ class MainWindow(QMainWindow):
header.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) header.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
header.customContextMenuRequested.connect( header.customContextMenuRequested.connect(
self._handle_header_right_click) self._handle_header_right_click)
header.sectionClicked.connect(self._handle_header_left_click)
self._list_widget.itemSelectionChanged.connect( self._list_widget.itemSelectionChanged.connect(
self._handle_list_selection_changed) self._handle_list_selection_changed)
@ -110,6 +110,9 @@ class MainWindow(QMainWindow):
def _update_categories_from_dataframe(self): def _update_categories_from_dataframe(self):
df = self._pandas_model.get_dataframe() df = self._pandas_model.get_dataframe()
if 'category' not in df.columns:
df['category'] = [' '] * len(df.index)
df_categories = df['category'].unique() df_categories = df['category'].unique()
current_categories = [self._list_widget.item(x).text() for x current_categories = [self._list_widget.item(x).text() for x
in range(self._list_widget.count())] in range(self._list_widget.count())]
@ -154,6 +157,11 @@ class MainWindow(QMainWindow):
# Event handlers # 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): def _handle_header_right_click(self, pos):
column = self._table_view.horizontalHeader().logicalIndexAt(pos) column = self._table_view.horizontalHeader().logicalIndexAt(pos)
@ -185,10 +193,15 @@ class MainWindow(QMainWindow):
f"Are you sure you want to delete" f"Are you sure you want to delete"
f" category '{selected_item.text()}'?") 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: 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'] = ' ' 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): def _handle_clear_click(self):
self._assign_category(' ') self._assign_category(' ')
@ -201,7 +214,6 @@ class MainWindow(QMainWindow):
df = self._pandas_model.get_dataframe() df = self._pandas_model.get_dataframe()
df.loc[row_indices, 'category'] = category df.loc[row_indices, 'category'] = category
self._pandas_model.set_dataframe(df) self._pandas_model.set_dataframe(df)
def _handle_apply_click(self): def _handle_apply_click(self):

View File

@ -1,7 +1,7 @@
import numpy import numpy
import pandas as pd import pandas as pd
from PyQt6 import QtCore 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: def _get_str_dataframe(df: pd.DataFrame) -> pd.DataFrame:

View File

@ -127,8 +127,11 @@
<enum>QAbstractItemView::SelectRows</enum> <enum>QAbstractItemView::SelectRows</enum>
</property> </property>
<property name="sortingEnabled"> <property name="sortingEnabled">
<bool>true</bool> <bool>false</bool>
</property> </property>
<attribute name="horizontalHeaderShowSortIndicator" stdset="0">
<bool>true</bool>
</attribute>
<attribute name="horizontalHeaderStretchLastSection"> <attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool> <bool>true</bool>
</attribute> </attribute>