Add clear button; Disable buttons when function unavailable
This commit is contained in:
parent
f4b73064ff
commit
ba6b6c2e4a
@ -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)
|
||||
|
||||
@ -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>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user