From a2b3fa8627982bf98132b50c4f785c41b45897f5 Mon Sep 17 00:00:00 2001 From: Petter <petter.kallstrom@liu.se> Date: Thu, 4 May 2023 13:35:20 +0200 Subject: [PATCH] plot_window: Updated Oscars suggestions, and some more. --- b_asic/gui_utils/plot_window.py | 71 ++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 28 deletions(-) diff --git a/b_asic/gui_utils/plot_window.py b/b_asic/gui_utils/plot_window.py index ae1e5df6..0e5fd918 100644 --- a/b_asic/gui_utils/plot_window.py +++ b/b_asic/gui_utils/plot_window.py @@ -275,6 +275,16 @@ class PlotWindow(QWidget): markers = ".ov<^>s+*xd|_" ix = 0 self._auto_redraw = False + + def addline(key, vector, checked): + line = self._plot_axes.plot(np.real(res), fmt, label=key) + self._lines[key] = line[0] + list_item = QListWidgetItem(key) + list_item.setCheckState(Qt.CheckState.Unchecked) # will add it if checked + self._checklist.addItem(list_item) + self._lines[key].remove() # remove the line from plot. Keep it in _lines. + list_item.setCheckState(checked) # will add it if checked + for key, res in result.items(): key2 = name + "." + key ischecked = Qt.CheckState.Unchecked @@ -288,19 +298,6 @@ class PlotWindow(QWidget): else: fmt = '-' - def addline(key, vector, checked): - line = self._plot_axes.plot(np.real(res), fmt, label=key) - self._lines[key] = line[0] - list_item = QListWidgetItem(key) - list_item.setCheckState( - Qt.CheckState.Unchecked - ) # will add it if checked - self._checklist.addItem(list_item) - self._lines[ - key - ].remove() # remove the line from plot. Keep it in _lines. - list_item.setCheckState(checked) # will add it if checked - if all(np.imag(np.real_if_close(res)) == 0): # real: add one line with corresponding checkbox addline(key2, np.real(res), ischecked) @@ -368,13 +365,16 @@ class PlotWindow(QWidget): def start_simulation_dialog( sim_results: Dict[str, List[complex]], sfg_name: Optional[str] = None ): - """Deprecated. Use `show_simulation_result` instead.""" + """ + deprecated:: + Use :func:`show_simulation_result` instead. + """ show_simulation_result(sim_results, sfg_name) def show_simulation_result( sim_results: Dict[str, List[complex]], figure_name: Optional[str] = None -): +) -> PlotWindow: """ Display the simulation results window. @@ -385,6 +385,12 @@ def show_simulation_result( Alternative, sim_result can be a list, ['name1', sim_result1, 'name2', sim_result2, ...] figure_name : str, optional The name of the SFG. + Note: This starts the GUI event loop using `QApplication.instance().exec()`, and the function + will return when the window is closed. + If this is not desired, you can in ipython start the event loop using `%gui qt`, and define + a global variable `noqtexec = 1`. + Effect if no event loop is running: The windows turns black and do not reponse. + Effect if the event loop is started twice: The function will never return. """ if not QApplication.instance(): app = QApplication(sys.argv) @@ -392,10 +398,19 @@ def show_simulation_result( app = QApplication.instance() win = PlotWindow(sim_result=sim_results, figure_name=figure_name) win.show() - app.exec_() + + # I did not get "if 'noqtexec' in globals()" to work. Try this instead: + try: + if noqtexec != 1: + raise NameError() + except NameError: + app.exec() + return win # Simple test of the dialog +from time import sleep + if __name__ == "__main__": res1 = { '0': [1.5, 1.6, 1.5, 1], @@ -422,18 +437,18 @@ if __name__ == "__main__": 't3': [0, 0, 0, 1], } res3 = { - #'0': np.random.rand(50).tolist(), '0': np.random.rand(50), '1': np.random.rand(200).tolist(), } - res4 = { - '0': np.random.rand(60).tolist(), - '1': np.random.rand(220).tolist(), - 't4': np.random.rand(50).tolist(), - } - # start_simulation_dialog(res3) - app = QApplication(sys.argv) - win2 = PlotWindow(['Real', res1, 'Cpx', res2, res3], "Test data") - win2.add_result('res4', res4) - win2.show() - app.exec_() + # res4 = { + # '0': np.random.rand(60).tolist(), + # '1': np.random.rand(220).tolist(), + # 't4': np.random.rand(50).tolist(), + # } + win = show_simulation_result(['r1', res1, res2]) + try: + if noqtexec == 1: + sleep(5) + win.add_result('hej', res3) + except NameError: + pass -- GitLab