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
-
-
-
-
- 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