Source code for crikit.ui.helper_roiselect

"""
"""

# Append sys path
import sys as _sys
import os as _os


# Generic imports for QT-based programs
from PyQt5.QtWidgets import (QApplication as _QApplication,
                             QWidget as _QWidget,
                             QDialog as _QDialog,
                             QMainWindow as _QMainWindow,
                             QSizePolicy as _QSizePolicy,
                             QTableWidgetItem as _QTableWidgetItem,
                             QTableView as _QTableView,
                             QColorDialog as _QColorDialog,
                             QDoubleSpinBox as _QDoubleSpinBox,
                             QComboBox as _QComboBox,
                             QPushButton as _QPushButton,
                             QLineEdit as _QLineEdit,
                             QStyle as _QStyle,
                             QStyledItemDelegate as _QStyledItemDelegate)

from PyQt5.QtCore import (QAbstractItemModel as _QAbstractItemModel,
                          QAbstractTableModel as _QAbstractTableModel,
                          QModelIndex as _QModelIndex,
                          QVariant as _QVariant,
                          Qt as _Qt)

from PyQt5.QtGui import (QPixmap as _QPixmap,
                         QIcon as _QIcon,
                         QColor as _QColor)

# Other imports
import numpy as _np

# Import from Designer-based GUI
from crikit.ui.helper_plotOptions import plotStyle

# Generic imports for MPL-incorporation
import matplotlib as _mpl
_mpl.use('Qt5Agg')
_mpl.rcParams['font.family'] = 'sans-serif'
_mpl.rcParams['font.size'] = 10
_mpl.rcParams['savefig.dpi'] = 300
_mpl.rcParams['figure.figsize'] = (4, 4)
#_mpl.rcParams['figure.autolayout'] = True
_mpl.rcParams['legend.fontsize'] = 10

from matplotlib.backends.backend_qt5agg import (FigureCanvasQTAgg as _FigureCanvas, \
    NavigationToolbar2QT as _NavigationToolbar)

from matplotlib.figure import Figure as _Figure

[docs]class _PointsData: def __init__(self, num_current_plots=0): self.x = None self.y = None self.xpix = None self.ypix = None self.style = plotStyle(num_current_plots)
[docs]class ImageSelection: def __init__(self, parent=None): self.pointdata_list = [] @property def num_selections(self): return len(self.pointdata_list)
[docs] def clear_all(self): self.__init__()
[docs] def append_selection(self, xpix, ypix, x=None, y=None): pt = _PointsData(self.num_selections) if xpix is not None: pt.xpix = xpix pt.ypix = ypix if (x is not None and y is not None): pt.x = x pt.y = y else: pt.x = xpix pt.y = ypix else: pass self.pointdata_list.append(pt)
if __name__ == '__main__': from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(984, 658) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayout = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout.setObjectName("gridLayout") self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.pushbutton = QtWidgets.QPushButton('Test') self.verticalLayout.addWidget(self.pushbutton) self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 984, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) class testWindow(_QMainWindow): def __init__(self, parent=None): super(testWindow, self).__init__(parent) ### EDIT ### self.ui = Ui_MainWindow() ### EDIT ### self.ui.setupUi(self) ### EDIT ### def buttonPress(): winTest.cid = winTest.ui.mpl.canvas.mpl_connect('button_press_event', pointClick) def pointClick(event): if event.inaxes == winTest.ui.mpl.ax: x = int(_np.round(event.xdata)) y = int(_np.round(event.ydata)) selectiondata.append_selection(x,y) updatePlot() winTest.ui.mpl.canvas.mpl_disconnect(winTest.cid) def updatePlot(): winTest.ui.mpl.ax.clear() winTest.ui.mpl.img = winTest.ui.mpl.ax.imshow(data_slice, interpolation='none', cmap = _mpl.cm.gray , origin='lower') getx = winTest.ui.mpl.ax.get_xlim() gety = winTest.ui.mpl.ax.get_ylim() winTest.ui.mpl.ax.hold(True) for pts in selectiondata.pointdata_list: winTest.ui.mpl.ax.plot(pts.x, pts.y, marker='+', markersize=pts.style.markersize, markerfacecolor=pts.style.color, markeredgecolor=pts.style.color, linestyle='None') winTest.ui.mpl.ax.set_xlim(getx) winTest.ui.mpl.ax.set_ylim(gety) winTest.ui.mpl.canvas.draw() class _winMpl: def __init__(self): self.fig = None self.ax = None self.img = None self.canvas = None self.toolbar = None app = _QApplication(_sys.argv) winTest = testWindow() winTest.ui.mpl = _winMpl() winTest.ui.mpl.fig = _Figure() winTest.ui.mpl.ax = winTest.ui.mpl.fig.add_subplot(111) data = _np.random.rand(20,20,50) data_slice = data[:,:,25] winTest.ui.mpl.img = winTest.ui.mpl.ax.imshow(data_slice, interpolation='none', cmap = _mpl.cm.gray , origin='lower') winTest.ui.mpl.canvas = _FigureCanvas(winTest.ui.mpl.fig) winTest.ui.verticalLayout.insertWidget(0,winTest.ui.mpl.canvas) winTest.ui.pushbutton.pressed.connect(buttonPress) winTest.show() selectiondata = ImageSelection() _sys.exit(app.exec_())