diff --git a/README.md b/README.md index e3b9394..8072b7e 100644 --- a/README.md +++ b/README.md @@ -18,5 +18,5 @@ Visualize bank statements. ### Generate GUI from `*.ui` file ```bash -$ pyuic6 res/main_window.ui -o banking_breakdown/ui/generated.py +$ pyuic6 res/main_window.ui -o banking_breakdown/ui/main_window.py ``` \ No newline at end of file diff --git a/banking_breakdown/__main__.py b/banking_breakdown/__main__.py index 8aee9c0..94d1178 100644 --- a/banking_breakdown/__main__.py +++ b/banking_breakdown/__main__.py @@ -12,7 +12,7 @@ def categorize_func(args): if args.i is not None: df = get_stripped_statement(args.i) - ui.show_main_window("res/main_window.ui", df=df) + ui.show_main_window(df=df) def report_func(args): diff --git a/banking_breakdown/ui/__init__.py b/banking_breakdown/ui/__init__.py index fc7454c..0817bc1 100644 --- a/banking_breakdown/ui/__init__.py +++ b/banking_breakdown/ui/__init__.py @@ -18,6 +18,16 @@ def show_main_window(categories: typing.Sequence[str] = None, if df is not None: window.set_statement_data(df) + window.add_warning_text("The column 't' does not exist. Please rename the" + " column containing the dates of the transactions" + " to 't'.") + window.add_warning_text("The column 'balance' does not exist. Please" + " rename the column containing the balance after" + " each transaction to 'balance'") + window.add_warning_text("The column 'value' does not exist. Please rename" + " the column containing the values of the" + " transactions to 'value'.") + window.show() app.exec() diff --git a/banking_breakdown/ui/generated_wrapper.py b/banking_breakdown/ui/generated_wrapper.py index c0b0dd7..5e7efa2 100644 --- a/banking_breakdown/ui/generated_wrapper.py +++ b/banking_breakdown/ui/generated_wrapper.py @@ -2,11 +2,12 @@ import typing from functools import partial import pandas as pd -from PyQt6.QtWidgets import QMainWindow, QTableView +from PyQt6.QtGui import QPixmap +from PyQt6.QtWidgets import QMainWindow, QTableView, QHBoxLayout, QLabel from PyQt6 import uic, QtGui, QtCore from PyQt6.QtCore import Qt -from banking_breakdown.ui.generated import Ui_MainWindow +from banking_breakdown.ui.main_window import Ui_MainWindow class PandasModel(QtCore.QAbstractTableModel): @@ -100,3 +101,21 @@ class GeneratedWindowWrapper(QMainWindow): def _handle_apply_click(self): pass + + def add_warning_text(self, text: str): + layout = QHBoxLayout() + + warningIcon = QLabel() + pixmap = QPixmap('res/warning.png') + warningIcon.setPixmap(pixmap) + + label = QLabel(text) + label.setWordWrap(True) + + layout.addWidget(warningIcon) + layout.addWidget(label) + + layout.setStretch(0, 0) + layout.setStretch(1, 1) + + self._window.warningLayout.addLayout(layout) diff --git a/banking_breakdown/ui/generated.py b/banking_breakdown/ui/main_window.py similarity index 76% rename from banking_breakdown/ui/generated.py rename to banking_breakdown/ui/main_window.py index 308fdb2..25cd2b1 100644 --- a/banking_breakdown/ui/generated.py +++ b/banking_breakdown/ui/main_window.py @@ -15,7 +15,20 @@ class Ui_MainWindow(object): MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(parent=MainWindow) self.centralwidget.setObjectName("centralwidget") - self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.centralwidget) + self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.centralwidget) + self.verticalLayout_5.setSpacing(0) + self.verticalLayout_5.setObjectName("verticalLayout_5") + self.horizontalLayout_5 = QtWidgets.QHBoxLayout() + self.horizontalLayout_5.setObjectName("horizontalLayout_5") + self.warningWidget = QtWidgets.QWidget(parent=self.centralwidget) + self.warningWidget.setMaximumSize(QtCore.QSize(600, 16777215)) + self.warningWidget.setObjectName("warningWidget") + self.warningLayout = QtWidgets.QVBoxLayout(self.warningWidget) + self.warningLayout.setContentsMargins(-1, 0, -1, 9) + self.warningLayout.setObjectName("warningLayout") + self.horizontalLayout_5.addWidget(self.warningWidget) + self.verticalLayout_5.addLayout(self.horizontalLayout_5) + self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.groupBox = QtWidgets.QGroupBox(parent=self.centralwidget) self.groupBox.setObjectName("groupBox") @@ -24,6 +37,7 @@ class Ui_MainWindow(object): self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.createCategoryButton = QtWidgets.QPushButton(parent=self.groupBox) + self.createCategoryButton.setStatusTip("") self.createCategoryButton.setObjectName("createCategoryButton") self.horizontalLayout.addWidget(self.createCategoryButton) self.deleteCategoryButton = QtWidgets.QPushButton(parent=self.groupBox) @@ -55,20 +69,15 @@ class Ui_MainWindow(object): self.verticalLayout.addWidget(self.statementTableView) self.horizontalLayout_3.addWidget(self.groupBox_2) self.horizontalLayout_3.setStretch(1, 1) + self.verticalLayout_5.addLayout(self.horizontalLayout_3) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(parent=MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menubar.setObjectName("menubar") - self.menuFile = QtWidgets.QMenu(parent=self.menubar) - self.menuFile.setObjectName("menuFile") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(parent=MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) - self.actionSave = QtGui.QAction(parent=MainWindow) - self.actionSave.setObjectName("actionSave") - self.menuFile.addAction(self.actionSave) - self.menubar.addAction(self.menuFile.menuAction()) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) @@ -77,10 +86,10 @@ class Ui_MainWindow(object): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.groupBox.setTitle(_translate("MainWindow", "Categories")) + self.createCategoryButton.setToolTip(_translate("MainWindow", "Create new category")) self.createCategoryButton.setText(_translate("MainWindow", "Create")) + self.deleteCategoryButton.setToolTip(_translate("MainWindow", "Delete selected category")) self.deleteCategoryButton.setText(_translate("MainWindow", "Delete")) + self.applyCategoryButton.setToolTip(_translate("MainWindow", "Apply selected category to selected transactions")) self.applyCategoryButton.setText(_translate("MainWindow", "Apply")) self.groupBox_2.setTitle(_translate("MainWindow", "Bank statement")) - self.menuFile.setTitle(_translate("MainWindow", "File")) - self.actionSave.setText(_translate("MainWindow", "Save")) - self.actionSave.setShortcut(_translate("MainWindow", "Ctrl+S")) diff --git a/res/main_window.ui b/res/main_window.ui index 1d67687..5d0c4ee 100644 --- a/res/main_window.ui +++ b/res/main_window.ui @@ -14,86 +14,127 @@ MainWindow - + + + 0 + - - - Categories - - - - - - - - Create - - - - - - - Delete - - - - - - - - - QAbstractScrollArea::AdjustToContents + + + + + + 600 + 16777215 + + + + + 0 + + + 9 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Apply - - - - - - + + + - - - Bank statement - - - - - - false - - - true - - - false - - - - - + + + + + Categories + + + + + + + + Create new category + + + + + + Create + + + + + + + Delete selected category + + + Delete + + + + + + + + + QAbstractScrollArea::AdjustToContents + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Apply selected category to selected transactions + + + Apply + + + + + + + + + + + + Bank statement + + + + + + false + + + true + + + false + + + + + + + @@ -106,23 +147,8 @@ 23 - - - File - - - - - - - Save - - - Ctrl+S - - diff --git a/res/warning.png b/res/warning.png new file mode 100644 index 0000000..6126f98 Binary files /dev/null and b/res/warning.png differ