From f12ecb67472aa2453d3b1b3fb68e4eb9521aee77 Mon Sep 17 00:00:00 2001 From: hbui <hong-phuc.bui@htwsaar.de> Date: Sun, 21 Jul 2024 13:41:27 +0200 Subject: [PATCH] gui ok --- num-int/src/numint/guimain.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 56 insertions(+), 2 deletions(-) diff --git a/num-int/src/numint/guimain.py b/num-int/src/numint/guimain.py index 8ac8d68..f16cd6c 100644 --- a/num-int/src/numint/guimain.py +++ b/num-int/src/numint/guimain.py @@ -1,8 +1,22 @@ import sys +import matplotlib -from PySide6.QtWidgets import QApplication, QMainWindow +from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout +from numint.input_parser import parse_function, parse_value +from numint.riemann_sum import numint_epsilon, numint_section from numint.ui_mainwindow import Ui_MainWindow +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, NavigationToolbar2QT as NavigationToolbar +from matplotlib.figure import Figure + +matplotlib.use('QtAgg') + + +class MplCanvas(FigureCanvasQTAgg): + def __init__(self, parent=None, width=5, height=4, dpi=100): + fig = Figure(figsize=(width, height), dpi=dpi) + self.axes = fig.add_subplot(111) + super(MplCanvas, self).__init__(fig) class MainWindow(QMainWindow): @@ -10,6 +24,47 @@ super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) + self.canvas = MplCanvas(self) + self._update_plot() + + toolbar = NavigationToolbar(self.canvas, self) + layout = QVBoxLayout() + layout.addWidget(toolbar) + layout.addWidget(self.canvas) + self.ui.plotBox.setLayout(layout) + self.ui.plotBtn.clicked.connect(self._update_plot) + + def _update_plot(self): + fn_expr = self.ui.function.text() + self.fn_expr = fn_expr + start = self.ui.startValue.text() + end = self.ui.endValue.text() + epsilon = self.ui.espilon.text() + try: + f = parse_function(fn_expr) + (a, b) = (parse_value(start), parse_value(end)) + if epsilon is not None and len(epsilon.strip()) > 0: + eps = parse_value(epsilon) + print(f"plot {fn_expr}, {a}, {b}, epsilon = {eps}") + (self.x, self.y, *_) = numint_epsilon(f, a, b, eps) + self._update_plot_eps() + else: + section = self.ui.section.text() + sec = parse_value(section) + print(f"plot f(x) = {fn_expr}, {a}, {b}, section = {sec}") + (self.x, self.y, *_) = numint_section(f, a, b, sec) + self._update_plot_eps() + except Exception as ex: + print(ex) + pass + + def _update_plot_eps(self): + self.canvas.axes.cla() # Clear the canvas. + self.canvas.axes.stairs(self.y[1:], self.x, baseline=0, fill=True, alpha=0.5, label=self.fn_expr) + self.canvas.axes.stairs(self.y[0:-1], self.x, baseline=0, fill=True, alpha=0.5, label=self.fn_expr) + self.canvas.axes.plot(self.x, self.y, color="black") + self.canvas.draw() + def main(): @@ -22,4 +77,3 @@ if __name__ == "__main__": main() - -- Gitblit v1.10.0-SNAPSHOT