diff --git a/plottr/plot/mpl/widgets.py b/plottr/plot/mpl/widgets.py index 0f4c3227..e2e767f1 100644 --- a/plottr/plot/mpl/widgets.py +++ b/plottr/plot/mpl/widgets.py @@ -9,6 +9,7 @@ from matplotlib import rcParams from matplotlib.axes import Axes from matplotlib.figure import Figure +from matplotlib.backend_bases import LocationEvent, Event from matplotlib.backends.backend_qt5agg import ( FigureCanvasQTAgg as FCanvas, NavigationToolbar2QT as NavBar, @@ -124,6 +125,15 @@ def metaToClipboard(self) -> None: for k, v in self._meta_info.items()) clipboard.setText(meta_info_string) + def coordinateToClipboard(self, event: Event) -> None: + if isinstance(event, LocationEvent): + clipboard = QtWidgets.QApplication.clipboard() + if event.xdata is not None and event.ydata is not None: + coord_info_string = '({:.8g}, {:.8g})'.format(event.xdata, event.ydata) + clipboard.setText(coord_info_string) + else: + pass + def setFigureTitle(self, title: str) -> None: """Add a title to the figure.""" self.fig.suptitle(title, @@ -163,6 +173,7 @@ def __init__(self, parent: Optional[PlotWidgetContainer] = None): layout.addWidget(self.plot) layout.addWidget(self.mplBar) self.setLayout(layout) + self.addPlotOptions() def setMeta(self, data: DataDictBase) -> None: """Add meta info contained in the data to the figure. @@ -196,6 +207,10 @@ def addMplBarOptions(self) -> None: self.mplBar.addSeparator() self.mplBar.addAction('Copy Figure', self.plot.toClipboard) self.mplBar.addAction('Copy Meta', self.plot.metaToClipboard) + + def addPlotOptions(self) -> None: + """Add options for copying coordinates to the clipboard""" + self.plot.mpl_connect('button_press_event', self.plot.coordinateToClipboard) def figureDialog() -> Tuple[Figure, QtWidgets.QDialog]: