add time slider and saving functionality to output

This commit is contained in:
2025-04-25 17:35:54 +01:00
parent 348b027ede
commit f2a0735972
4 changed files with 120 additions and 14 deletions

View File

@ -133,7 +133,7 @@ class SIPPCompare(QMainWindow):
# Show the output window - this func is called from calculate_fee()
def show_output_win(self):
# Refresh the results when new fees are calculated
self.output_win.display_output(self.results)
self.output_win.display_output(self.results, 1)
self.output_win.show()
def show_platform_list(self):

View File

@ -1,11 +1,12 @@
import datetime
import os
from datetime import datetime
from PyQt6 import uic
from PyQt6.QtGui import QIcon
from PyQt6.QtWidgets import QWidget
from PyQt6.QtWidgets import QWidget, QFileDialog
import resource_finder
from widgets.mpl_widget import MplWidget
class OutputWindow(QWidget):
@ -15,17 +16,43 @@ class OutputWindow(QWidget):
uic.loadUi(resource_finder.get_res_path("gui/output_window.ui"), self)
self.setWindowIcon(QIcon(resource_finder.get_res_path("icon2.ico")))
def display_output(self, results: list):
ax = self.graphWidget.canvas.axes
ax.clear()
ax.cla()
self.graphWidget.canvas.draw_idle()
# Define class variables
self.canvas = self.graphWidget.canvas
self.ax = self.canvas.axes
self.fig = self.canvas.figure
self.results = []
# Handle events
self.save_graph_but.clicked.connect(self.save_graph)
self.time_slider.valueChanged.connect(self.change_time)
def display_output(self, results: list, years: int):
self.results = results
self.ax.clear()
self.ax.cla()
self.canvas.draw_idle()
names = []
values = []
for result in results:
names.append(result[4])
values.append(sum(result[:4]))
values.append(sum(result[:4]) * years)
h_bars = ax.barh(names, values)
ax.bar_label(h_bars, label_type='center', labels=[f"£{x:,.2f}" for x in h_bars.datavalues])
h_bars = self.ax.barh(names, values)
self.ax.bar_label(h_bars, label_type='center', labels=[f"£{x:,.2f}" for x in h_bars.datavalues])
def save_graph(self):
file_picker = QFileDialog(self)
file_picker.setFileMode(QFileDialog.FileMode.Directory)
folder_path = ""
if file_picker.exec():
folder_path = file_picker.selectedFiles()[0]
cur_time = datetime.now()
filename_str = f"{folder_path}/SIPPCompare-{cur_time.year}.{cur_time.month}.{cur_time.day}.png"
self.fig.savefig(filename_str, dpi=150)
def change_time(self):
years: int = self.time_slider.value()
self.time_lab.setText(f"Fees over {years} year(s) (assuming no change in value)")
self.display_output(self.results, years)

View File

@ -6,8 +6,8 @@ from PyQt6.QtWidgets import QWidget, QVBoxLayout
class MplWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.canvas = FigureCanvasQTAgg(Figure(figsize=(10, 10), dpi=100))
self.canvas = FigureCanvasQTAgg(Figure(figsize=(15, 8), dpi=100))
vertical_layout = QVBoxLayout()
vertical_layout.addWidget(self.canvas)
self.canvas.axes = self.canvas.figure.add_subplot(1, 1, 1)
self.setLayout(vertical_layout)
self.setLayout(vertical_layout)