associated with a :class:`~silx.gui.plot.PlotWidget`. """ __authors__ = ["P. Knobel"] __license__ = "MIT" __date__ = "28/06/2017" from silx.gui import qt from silx.gui.plot.PlotWidget import PlotWidget from silx.gui.plot.ItemsSelectionDialog import ItemsSelectionDialog app = qt.QApplication([]) pw = PlotWidget() pw.addCurve([0, 1, 2], [3, 2, 1], "A curve") pw.addScatter([0, 1, 2.5], [3, 2.5, 0.9], [8, 9, 72], "A scatter") pw.addHistogram([0, 1, 2.5], [0, 1, 2, 3], "A histogram") pw.addImage([[0, 1, 2], [3, 2, 1]], "An image") pw.show() isd = ItemsSelectionDialog(plot=pw) isd.setItemsSelectionMode(qt.QTableWidget.ExtendedSelection) result = isd.exec_() if result: for item in isd.getSelectedItems(): print(item.getName(), type(item)) else: print("Selection cancelled") app.exec_()
def _getFitWindow(self): self.xlabel = self.plot.getXAxis().getLabel() self.ylabel = self.plot.getYAxis().getLabel() self.xmin, self.xmax = self.plot.getXAxis().getLimits() histo = _getUniqueHistogram(self.plot) curve = _getUniqueCurve(self.plot) if histo is None and curve is None: # ambiguous case, we need to ask which plot item to fit isd = ItemsSelectionDialog(parent=self.plot, plot=self.plot) isd.setWindowTitle("Select item to be fitted") isd.setItemsSelectionMode(qt.QTableWidget.SingleSelection) isd.setAvailableKinds(["curve", "histogram"]) isd.selectAllKinds() result = isd.exec_() if result and len(isd.getSelectedItems()) == 1: item = isd.getSelectedItems()[0] else: return elif histo is not None: # presence of a unique histo and no curve item = histo elif curve is not None: # presence of a unique or active curve item = curve self.legend = item.getLegend() if isinstance(item, Histogram): bin_edges = item.getBinEdgesData(copy=False) # take the middle coordinate between adjacent bin edges self.x = (bin_edges[1:] + bin_edges[:-1]) / 2 self.y = item.getValueData(copy=False) # else take the active curve, or else the unique curve elif isinstance(item, Curve): self.x = item.getXData(copy=False) self.y = item.getYData(copy=False) # open a window with a FitWidget if self.fit_window is None: self.fit_window = qt.QMainWindow() # import done here rather than at module level to avoid circular import # FitWidget -> BackgroundWidget -> PlotWindow -> actions -> fit -> FitWidget from ...fit.FitWidget import FitWidget self.fit_widget = FitWidget(parent=self.fit_window) self.fit_window.setCentralWidget(self.fit_widget) self.fit_widget.guibuttons.DismissButton.clicked.connect( self.fit_window.close) self.fit_widget.sigFitWidgetSignal.connect(self.handle_signal) self.fit_window.show() else: if self.fit_window.isHidden(): self.fit_window.show() self.fit_widget.show() self.fit_window.raise_() self.fit_widget.setData(self.x, self.y, xmin=self.xmin, xmax=self.xmax) self.fit_window.setWindowTitle("Fitting " + self.legend + " on x range %f-%f" % (self.xmin, self.xmax))
def _initFit(self, window): plot = self.plot self.xlabel = plot.getXAxis().getLabel() self.ylabel = plot.getYAxis().getLabel() self.xmin, self.xmax = plot.getXAxis().getLimits() histo = _getUniqueHistogram(self.plot) curve = _getUniqueCurve(self.plot) if histo is None and curve is None: # ambiguous case, we need to ask which plot item to fit isd = ItemsSelectionDialog(parent=plot, plot=self.plot) isd.setWindowTitle("Select item to be fitted") isd.setItemsSelectionMode(qt.QTableWidget.SingleSelection) isd.setAvailableKinds(["curve", "histogram"]) isd.selectAllKinds() result = isd.exec_() if result and len(isd.getSelectedItems()) == 1: item = isd.getSelectedItems()[0] else: return elif histo is not None: # presence of a unique histo and no curve item = histo elif curve is not None: # presence of a unique or active curve item = curve self.legend = item.getLegend() if isinstance(item, Histogram): bin_edges = item.getBinEdgesData(copy=False) # take the middle coordinate between adjacent bin edges self.x = (bin_edges[1:] + bin_edges[:-1]) / 2 self.y = item.getValueData(copy=False) # else take the active curve, or else the unique curve elif isinstance(item, Curve): self.x = item.getXData(copy=False) self.y = item.getYData(copy=False) window.setData(self.x, self.y, xmin=self.xmin, xmax=self.xmax) window.setWindowTitle( "Fitting " + self.legend + " on x range %f-%f" % (self.xmin, self.xmax))
def _initFit(self): plot = self.plot if plot is None: _logger.error("No associated PlotWidget") return item = _getUniqueCurveOrHistogram(plot) if item is None: # ambiguous case, we need to ask which plot item to fit isd = ItemsSelectionDialog(parent=plot, plot=plot) isd.setWindowTitle("Select item to be fitted") isd.setItemsSelectionMode(qt.QTableWidget.SingleSelection) isd.setAvailableKinds(["curve", "histogram"]) isd.selectAllKinds() if not isd.exec_(): # Cancel self._getToolWindow().setVisible(False) else: selectedItems = isd.getSelectedItems() item = selectedItems[0] if len(selectedItems) == 1 else None self._setXRange(*plot.getXAxis().getLimits()) self._setFittedItem(item)
associated with a :class:`~silx.gui.plot.PlotWidget`. """ __authors__ = ["P. Knobel"] __license__ = "MIT" __date__ = "28/06/2017" from silx.gui import qt from silx.gui.plot.PlotWidget import PlotWidget from silx.gui.plot.ItemsSelectionDialog import ItemsSelectionDialog app = qt.QApplication([]) pw = PlotWidget() pw.addCurve([0, 1, 2], [3, 2, 1], "A curve") pw.addScatter([0, 1, 2.5], [3, 2.5, 0.9], [8, 9, 72], "A scatter") pw.addHistogram([0, 1, 2.5], [0, 1, 2, 3], "A histogram") pw.addImage([[0, 1, 2], [3, 2, 1]], "An image") pw.show() isd = ItemsSelectionDialog(plot=pw) isd.setItemsSelectionMode(qt.QTableWidget.ExtendedSelection) result = isd.exec_() if result: for item in isd.getSelectedItems(): print(item.getLegend(), type(item)) else: print("Selection cancelled") app.exec_()
def _getFitWindow(self): self.xlabel = self.plot.getXAxis().getLabel() self.ylabel = self.plot.getYAxis().getLabel() self.xmin, self.xmax = self.plot.getXAxis().getLimits() histo = _getUniqueHistogram(self.plot) curve = _getUniqueCurve(self.plot) if histo is None and curve is None: # ambiguous case, we need to ask which plot item to fit isd = ItemsSelectionDialog(parent=self.plot, plot=self.plot) isd.setWindowTitle("Select item to be fitted") isd.setItemsSelectionMode(qt.QTableWidget.SingleSelection) isd.setAvailableKinds(["curve", "histogram"]) isd.selectAllKinds() result = isd.exec_() if result and len(isd.getSelectedItems()) == 1: item = isd.getSelectedItems()[0] else: return elif histo is not None: # presence of a unique histo and no curve item = histo elif curve is not None: # presence of a unique or active curve item = curve self.legend = item.getLegend() if isinstance(item, Histogram): bin_edges = item.getBinEdgesData(copy=False) # take the middle coordinate between adjacent bin edges self.x = (bin_edges[1:] + bin_edges[:-1]) / 2 self.y = item.getValueData(copy=False) # else take the active curve, or else the unique curve elif isinstance(item, Curve): self.x = item.getXData(copy=False) self.y = item.getYData(copy=False) # open a window with a FitWidget if self.fit_window is None: self.fit_window = qt.QMainWindow() # import done here rather than at module level to avoid circular import # FitWidget -> BackgroundWidget -> PlotWindow -> actions -> fit -> FitWidget from ...fit.FitWidget import FitWidget self.fit_widget = FitWidget(parent=self.fit_window) self.fit_window.setCentralWidget( self.fit_widget) self.fit_widget.guibuttons.DismissButton.clicked.connect( self.fit_window.close) self.fit_widget.sigFitWidgetSignal.connect( self.handle_signal) self.fit_window.show() else: if self.fit_window.isHidden(): self.fit_window.show() self.fit_widget.show() self.fit_window.raise_() self.fit_widget.setData(self.x, self.y, xmin=self.xmin, xmax=self.xmax) self.fit_window.setWindowTitle( "Fitting " + self.legend + " on x range %f-%f" % (self.xmin, self.xmax))
def _initFit(self, window): plot = self.plot self.xlabel = plot.getXAxis().getLabel() self.ylabel = plot.getYAxis().getLabel() self.xmin, self.xmax = plot.getXAxis().getLimits() histo = _getUniqueHistogram(self.plot) curve = _getUniqueCurve(self.plot) if histo is None and curve is None: # ambiguous case, we need to ask which plot item to fit isd = ItemsSelectionDialog(parent=plot, plot=self.plot) isd.setWindowTitle("Select item to be fitted") isd.setItemsSelectionMode(qt.QTableWidget.SingleSelection) isd.setAvailableKinds(["curve", "histogram"]) isd.selectAllKinds() result = isd.exec_() if result and len(isd.getSelectedItems()) == 1: item = isd.getSelectedItems()[0] else: return elif histo is not None: # presence of a unique histo and no curve item = histo elif curve is not None: # presence of a unique or active curve item = curve self.legend = item.getLegend() if isinstance(item, Histogram): bin_edges = item.getBinEdgesData(copy=False) # take the middle coordinate between adjacent bin edges self.x = (bin_edges[1:] + bin_edges[:-1]) / 2 self.y = item.getValueData(copy=False) # else take the active curve, or else the unique curve elif isinstance(item, Curve): self.x = item.getXData(copy=False) self.y = item.getYData(copy=False) self.fit_widget.setData(self.x, self.y, xmin=self.xmin, xmax=self.xmax) window.setWindowTitle( "Fitting " + self.legend + " on x range %f-%f" % (self.xmin, self.xmax))