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.findChild(QPushButton, "deleteCategoryButton")
|
||||||
self._apply_button \
|
self._apply_button \
|
||||||
= self.findChild(QPushButton, "applyCategoryButton")
|
= self.findChild(QPushButton, "applyCategoryButton")
|
||||||
|
self._clear_button \
|
||||||
|
= self.findChild(QPushButton, "clearCategoryButton")
|
||||||
self._list_widget \
|
self._list_widget \
|
||||||
= self.findChild(QListWidget, "categoryListWidget")
|
= self.findChild(QListWidget, "categoryListWidget")
|
||||||
self._table_view \
|
self._table_view \
|
||||||
@ -101,6 +103,7 @@ class MainWindow(QMainWindow):
|
|||||||
|
|
||||||
self._create_button.clicked.connect(self._handle_create_click)
|
self._create_button.clicked.connect(self._handle_create_click)
|
||||||
self._delete_button.clicked.connect(self._handle_delete_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._apply_button.clicked.connect(self._handle_apply_click)
|
||||||
self._list_widget.itemActivated.connect(self._handle_item_double_click)
|
self._list_widget.itemActivated.connect(self._handle_item_double_click)
|
||||||
|
|
||||||
@ -110,6 +113,9 @@ class MainWindow(QMainWindow):
|
|||||||
header.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
|
header.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
|
||||||
header.customContextMenuRequested.connect(self._header_right_clicked)
|
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):
|
def set_statement_data(self, df: pd.DataFrame):
|
||||||
if 'category' not in df.columns:
|
if 'category' not in df.columns:
|
||||||
df['category'] = [' '] * len(df.index)
|
df['category'] = [' '] * len(df.index)
|
||||||
@ -132,6 +138,13 @@ class MainWindow(QMainWindow):
|
|||||||
self._show_warnings(df)
|
self._show_warnings(df)
|
||||||
self._update_categories_from_dataframe(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:
|
def get_statement_data(self) -> pd.DataFrame:
|
||||||
return self._table_view.model().sourceModel().get_dataframe()
|
return self._table_view.model().sourceModel().get_dataframe()
|
||||||
|
|
||||||
@ -294,6 +307,9 @@ class MainWindow(QMainWindow):
|
|||||||
df = self.get_statement_data()
|
df = self.get_statement_data()
|
||||||
df.loc[df['category'] == selected_item.text(), 'category'] = ' '
|
df.loc[df['category'] == selected_item.text(), 'category'] = ' '
|
||||||
|
|
||||||
|
def _handle_clear_click(self):
|
||||||
|
self._assign_category(' ')
|
||||||
|
|
||||||
def _assign_category(self, category: str):
|
def _assign_category(self, category: str):
|
||||||
indexes = self._table_view.selectionModel().selectedRows()
|
indexes = self._table_view.selectionModel().selectedRows()
|
||||||
|
|
||||||
@ -320,6 +336,38 @@ class MainWindow(QMainWindow):
|
|||||||
df = self.get_statement_data()
|
df = self.get_statement_data()
|
||||||
df.to_csv(filename, index=False)
|
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):
|
def show_main_window(df: pd.DataFrame = None):
|
||||||
app = QApplication(sys.argv)
|
app = QApplication(sys.argv)
|
||||||
@ -336,9 +384,6 @@ def main():
|
|||||||
import os
|
import os
|
||||||
os.chdir("../")
|
os.chdir("../")
|
||||||
|
|
||||||
categories = ["Food", "Rent & Utilities", "Hobbies", "Education",
|
|
||||||
"Transportation", "Social Life", "Other"]
|
|
||||||
|
|
||||||
df = pd.read_csv("res/bank_statement_2023_categorized_renamed.csv")
|
df = pd.read_csv("res/bank_statement_2023_categorized_renamed.csv")
|
||||||
|
|
||||||
show_main_window(df)
|
show_main_window(df)
|
||||||
|
|||||||
@ -52,6 +52,9 @@
|
|||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="createCategoryButton">
|
<widget class="QPushButton" name="createCategoryButton">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Create new category</string>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Create</string>
|
<string>Create</string>
|
||||||
</property>
|
</property>
|
||||||
@ -59,6 +62,12 @@
|
|||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="deleteCategoryButton">
|
<widget class="QPushButton" name="deleteCategoryButton">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Delete selected category</string>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Delete</string>
|
<string>Delete</string>
|
||||||
</property>
|
</property>
|
||||||
@ -76,20 +85,26 @@
|
|||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer">
|
<widget class="QPushButton" name="clearCategoryButton">
|
||||||
<property name="orientation">
|
<property name="enabled">
|
||||||
<enum>Qt::Horizontal</enum>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizeHint" stdset="0">
|
<property name="toolTip">
|
||||||
<size>
|
<string>Clear category field of selected transactions</string>
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
<property name="text">
|
||||||
|
<string>Clear</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="applyCategoryButton">
|
<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">
|
<property name="text">
|
||||||
<string>Apply</string>
|
<string>Apply</string>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user