Add clear button; Disable buttons when function unavailable

This commit is contained in:
2024-01-04 14:13:46 +01:00
parent f4b73064ff
commit ba6b6c2e4a
2 changed files with 72 additions and 12 deletions

View File

@@ -90,6 +90,8 @@ class MainWindow(QMainWindow):
= self.findChild(QPushButton, "deleteCategoryButton")
self._apply_button \
= self.findChild(QPushButton, "applyCategoryButton")
self._clear_button \
= self.findChild(QPushButton, "clearCategoryButton")
self._list_widget \
= self.findChild(QListWidget, "categoryListWidget")
self._table_view \
@@ -101,6 +103,7 @@ class MainWindow(QMainWindow):
self._create_button.clicked.connect(self._handle_create_click)
self._delete_button.clicked.connect(self._handle_delete_click)
self._clear_button.clicked.connect(self._handle_clear_click)
self._apply_button.clicked.connect(self._handle_apply_click)
self._list_widget.itemActivated.connect(self._handle_item_double_click)
@@ -110,6 +113,9 @@ class MainWindow(QMainWindow):
header.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
header.customContextMenuRequested.connect(self._header_right_clicked)
self._list_widget.itemSelectionChanged.connect(
self._handle_list_selection_changed)
def set_statement_data(self, df: pd.DataFrame):
if 'category' not in df.columns:
df['category'] = [' '] * len(df.index)
@@ -132,6 +138,13 @@ class MainWindow(QMainWindow):
self._show_warnings(df)
self._update_categories_from_dataframe(df)
# Upon reloading the data, the selection is cleared but no signal
# is generated. Manually call the signal handler
self._handle_table_selection_changed()
self._table_view.selectionModel().selectionChanged.connect(
self._handle_table_selection_changed)
def get_statement_data(self) -> pd.DataFrame:
return self._table_view.model().sourceModel().get_dataframe()
@@ -294,6 +307,9 @@ class MainWindow(QMainWindow):
df = self.get_statement_data()
df.loc[df['category'] == selected_item.text(), 'category'] = ' '
def _handle_clear_click(self):
self._assign_category(' ')
def _assign_category(self, category: str):
indexes = self._table_view.selectionModel().selectedRows()
@@ -320,6 +336,38 @@ class MainWindow(QMainWindow):
df = self.get_statement_data()
df.to_csv(filename, index=False)
def _check_enable_delete_button(self):
if len(self._list_widget.selectedItems()) > 0:
self._delete_button.setEnabled(True)
else:
self._delete_button.setEnabled(False)
def _check_enable_clear_button(self):
if len(self._table_view.selectionModel().selectedRows()) > 0:
self._clear_button.setEnabled(True)
else:
self._clear_button.setEnabled(False)
def _check_enable_apply_button(self):
if ((len(self._table_view.selectionModel().selectedRows()) > 0)
and (len(self._list_widget.selectedItems()) > 0)):
self._apply_button.setEnabled(True)
else:
self._apply_button.setEnabled(False)
def _handle_list_selection_changed(self):
self._check_enable_delete_button()
self._check_enable_apply_button()
def _handle_table_selection_changed(self):
self._check_enable_clear_button()
self._check_enable_apply_button()
#
# Other functions
#
def show_main_window(df: pd.DataFrame = None):
app = QApplication(sys.argv)
@@ -336,9 +384,6 @@ def main():
import os
os.chdir("../")
categories = ["Food", "Rent & Utilities", "Hobbies", "Education",
"Transportation", "Social Life", "Other"]
df = pd.read_csv("res/bank_statement_2023_categorized_renamed.csv")
show_main_window(df)