diff --git a/b_asic/GUI/plot_window.py b/b_asic/GUI/plot_window.py index 32d87ae2e0bf1fdcb8e29eee777b487cf4e37352..f804be597109c568c333316dfd0e0e7c07fc2218 100644 --- a/b_asic/GUI/plot_window.py +++ b/b_asic/GUI/plot_window.py @@ -1,6 +1,5 @@ # TODO's: # * Solve the legend update. That isn't working at all. -# * Change labels "All" and "None" into buttons. # * Make it work with the main_window import re @@ -15,13 +14,12 @@ from qtpy.QtCore import Qt from qtpy.QtGui import QKeySequence # Intereme imports for the Plot class: -from qtpy.QtWidgets import ( # QFrame,; QScrollArea,; QLineEdit,; QSizePolicy, +from qtpy.QtWidgets import ( # QFrame,; QScrollArea,; QLineEdit,; QSizePolicy,; QLabel, QApplication, QCheckBox, QDialog, QFileDialog, QHBoxLayout, - QLabel, QListWidget, QListWidgetItem, QPushButton, @@ -38,7 +36,7 @@ class PlotCanvas(FigureCanvas): super().__init__(fig) self.axes = fig.add_subplot(111) self.axes.xaxis.set_major_locator(MaxNLocator(integer=True)) - self.legend = self.axes.legend() + self.legend = None self.logger = logger FigureCanvas.updateGeometry(self) @@ -76,7 +74,13 @@ class PlotWindow(QDialog): ): super().__init__() self._window = window - self.setWindowFlags(Qt.WindowTitleHint | Qt.WindowCloseButtonHint) + self.setWindowFlags( + Qt.WindowTitleHint + | Qt.WindowCloseButtonHint + | Qt.WindowMinimizeButtonHint + | Qt.WindowMaximizeButtonHint + | Qt.WindowStaysOnTopHint + ) self.setWindowTitle("Simulation result") self.sim_result = sim_result self._auto_redraw = False @@ -124,17 +128,18 @@ class PlotWindow(QDialog): sim_result[key], visible=False, label=key ) self._lines[key] = line + self.plotcanvas.legend = self.plotcanvas.axes.legend() ########### List layout: ############## - # Add two labels for selecting all/none: + # Add two buttons for selecting all/none: hlayout = QHBoxLayout() - labelAll = QLabel("All") - labelAll.mousePressEvent = self._label_all_click - labelNone = QLabel("None") - labelNone.mousePressEvent = self._label_none_click - hlayout.addWidget(labelAll) - hlayout.addWidget(labelNone) + button_all = QPushButton("&All") + button_all.clicked.connect(self._button_all_click) + hlayout.addWidget(button_all) + button_none = QPushButton("&None") + button_none.clicked.connect(self._button_none_click) + hlayout.addWidget(button_none) listlayout.addLayout(hlayout) # Add the entire list @@ -155,11 +160,15 @@ class PlotWindow(QDialog): self.checklist.setFixedWidth(150) listlayout.addWidget(self.checklist) - # Add a "legend" checkbox, connected to the plot. + # Add additional checkboxes self.legend_checkbox = QCheckBox("&Legend") self.legend_checkbox.stateChanged.connect(self._legend_checkbox_change) self.legend_checkbox.setCheckState(Qt.CheckState.Checked) listlayout.addWidget(self.legend_checkbox) + # self.ontop_checkbox = QCheckBox("&On top") + # self.ontop_checkbox.stateChanged.connect(self._ontop_checkbox_change) + # self.ontop_checkbox.setCheckState(Qt.CheckState.Unchecked) + # listlayout.addWidget(self.ontop_checkbox) # Add "Close" buttons buttonClose = QPushButton("&Close", self) @@ -178,19 +187,27 @@ class PlotWindow(QDialog): if checkState == Qt.CheckState.Checked: self.plotcanvas.legend = self.plotcanvas.axes.legend() self.plotcanvas.draw() - # self.plotcanvas.legend - # if checkState == Qt.CheckState.Checked: - # print('legend on') - # else: - # print('legend off') - def _label_all_click(self, event): + # def _ontop_checkbox_change(self, checkState): + # Bugg: It seems the window closes if you change the WindowStaysOnTopHint. + # (Nothing happens if "changing" from False to False or True to True) + # self.setWindowFlag(Qt.WindowStaysOnTopHint, on = (checkState == Qt.CheckState.Checked)) + # self.setWindowFlag(Qt.WindowStaysOnTopHint, on = True) + # print("_ontop_checkbox_change") + + def _button_all_click(self, event): + self._auto_redraw = False for x in range(self.checklist.count()): self.checklist.item(x).setCheckState(Qt.CheckState.Checked) + self._auto_redraw = True + self.plotcanvas.draw() - def _label_none_click(self, event): + def _button_none_click(self, event): + self._auto_redraw = False for x in range(self.checklist.count()): self.checklist.item(x).setCheckState(Qt.CheckState.Unchecked) + self._auto_redraw = True + self.plotcanvas.draw() def _item_change(self, listitem): key = listitem.text() @@ -201,8 +218,6 @@ class PlotWindow(QDialog): if self.legend_checkbox.checkState == Qt.CheckState.Checked: self.plotcanvas.legend = self.plotcanvas.axes.legend() self.plotcanvas.draw() - # print(f"lines[{key}].set(visible={listitem.checkState() == Qt.CheckState.Checked}). autodraw={self._auto_redraw}") - # print("Arg:", listitem) # Simple test of the dialog