Source code for gui_widgets.GUIController

from PyQt6.QtWidgets import QMessageBox
from gui_widgets.inputForm import InputForm
from gui_widgets.resultView import ResultView
from app_control import forward


# --- Controller ---
[docs] class GUIController: """ Controller class connecting the InputForm and ResultView components. It handles the coordination between GUI inputs and backend simulation logic, and updates the result view based on calculated data. """ def __init__(self, input_form: InputForm, result_view: ResultView) -> None: """ Initialize the GUIController. Args: input_form (InputForm): Widget for collecting user inputs. result_view (ResultView): Widget for displaying calculated results. Returns: None """ self.input_form = input_form; self.result_view = result_view
[docs] def calculate_and_show(self) -> None: """ Run the simulation using input parameters and update the result view. This method: - Retrieves parameters from the input form - Runs the simulation via the `forward()` function - Extracts results (resonance frequency, Q-factor, absorption area) - Passes result data to the result view for plotting and display On failure, a critical QMessageBox is shown. Args: None Returns: None """ try: params = self.input_form.get_inputs() # create simulation sim = forward(params) self.simulation = sim # Extract results f_res = sim.f_resonance # Peak q_factor = sim.q_factor # Q-Factor a_max = sim.peak_absorbtion_area # Max Absorption Area data = {"Frequency [Hz]" : sim.sim_params.frequencies, "Absorption Area" : sim.absorbtion_area, "Impedance Friction" : sim.z_friction, "Impedance Porous" : sim.z_porous, "Impedance Radiation" : sim.z_radiation, "Impedance Stiff Mass" : sim.z_stiff_mass} # Update the GUI with simulation results self.result_view.show_results(f_res, data, q_factor, a_max) except Exception as e: QMessageBox.critical(None, "Fehler", str(e))