Add clear button; Disable buttons when function unavailable

This commit is contained in:
Andreas Tsouchlos 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)

View File

@ -52,6 +52,9 @@
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="createCategoryButton">
<property name="toolTip">
<string>Create new category</string>
</property>
<property name="text">
<string>Create</string>
</property>
@ -59,6 +62,12 @@
</item>
<item>
<widget class="QPushButton" name="deleteCategoryButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Delete selected category</string>
</property>
<property name="text">
<string>Delete</string>
</property>
@ -76,20 +85,26 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<widget class="QPushButton" name="clearCategoryButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
<property name="toolTip">
<string>Clear category field of selected transactions</string>
</property>
</spacer>
<property name="text">
<string>Clear</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="applyCategoryButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Apply selected category to selected transactions</string>
</property>
<property name="text">
<string>Apply</string>
</property>