Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use the upstream pyqtgraph #422

Open
wants to merge 11 commits into
base: dev
Choose a base branch
from
2 changes: 1 addition & 1 deletion extra_foam/gui/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from PyQt5.QtWidgets import QApplication

from .pyqtgraph import setConfigOptions
from pyqtgraph import setConfigOptions
from .main_gui import MainGUI
from ..config import config

Expand Down
5 changes: 3 additions & 2 deletions extra_foam/gui/image_tool/azimuthal_integ_1d_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@
"""
import numpy as np

import pyqtgraph as pg
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QVBoxLayout, QSplitter, QTabWidget

from .base_view import _AbstractImageToolView, create_imagetool_view
from ..ctrl_widgets import AzimuthalIntegCtrlWidget
from ..misc_widgets import FColor
from ..plot_widgets import ImageViewF, PlotWidgetF, Crosshair
from ..plot_widgets import ImageViewF, PlotWidgetF
from ...algorithms import find_peaks_1d
from ...config import AnalysisType, plot_labels

Expand Down Expand Up @@ -92,7 +93,7 @@ def __init__(self, *args, **kwargs):

self._azimuthal_integ_1d_curve = AzimuthalInteg1dPlot()

self._crosshair = Crosshair()
self._crosshair = pg.TargetItem(size=30, movable=False, label="Beam center")
self._crosshair.hide()

self.initUI()
Expand Down
5 changes: 4 additions & 1 deletion extra_foam/gui/image_tool/transform_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,10 @@ def updateF(self, data, auto_update):
if self._transform_type == ImageTransformType.CONCENTRIC_RINGS:
self._transformed.setImage(image.masked_mean)
elif image.transform_type == self._transform_type:
self._transformed.setImage(image.transformed)
if self._transform_type == ImageTransformType.FOURIER_TRANSFORM:
self._transformed.setImage(image.transformed.real)
else:
self._transformed.setImage(image.transformed)
else:
self._transformed.setImage(None)

Expand Down
17 changes: 4 additions & 13 deletions extra_foam/gui/misc_widgets/aesthetics.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,11 @@
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QBrush, QColor, QPen, QPalette

from ..pyqtgraph import ColorMap
from ..pyqtgraph.graphicsItems.GradientEditorItem import Gradients
from pyqtgraph import ColorMap
from pyqtgraph.graphicsItems.GradientEditorItem import Gradients

from ...config import config


class QualitativeColor:

foreground = config["GUI_FOREGROUND_COLOR"] # black
background = config["GUI_BACKGROUND_COLOR"] # white-like

class FColor:
k = (0, 0, 0) # black
n = (251, 154, 153) # pink
r = (227, 26, 28) # red
Expand Down Expand Up @@ -54,9 +48,6 @@ def mkBrush(cls, c, *, alpha=255):
return QBrush(QColor(*getattr(cls, c), alpha))


FColor = QualitativeColor


class SequentialColor:

# red
Expand Down Expand Up @@ -159,6 +150,6 @@ def set_button_color(btn, c):
if isinstance(c, QColor):
palette.setColor(QPalette.Button, c)
else:
palette.setColor(QPalette.Button, QualitativeColor.mkColor(c))
palette.setColor(QPalette.Button, FColor.mkColor(c))
btn.setAutoFillBackground(True)
btn.setPalette(palette)
1 change: 0 additions & 1 deletion extra_foam/gui/plot_widgets/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,3 @@
from .image_view_base import ImageViewF, TimedImageViewF
from .image_views import ImageAnalysis, RoiImageView
from .plot_widget_base import HistMixin, PlotWidgetF, TimedPlotWidgetF
from .graphics_widgets import Crosshair
47 changes: 9 additions & 38 deletions extra_foam/gui/plot_widgets/graphics_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,42 +20,13 @@
QGraphicsEllipseItem
)

from .. import pyqtgraph as pg
from ..pyqtgraph import Point
from ..pyqtgraph import functions as fn
from ..plot_widgets.plot_items import CurvePlotItem
import pyqtgraph as pg
from pyqtgraph import Point
from pyqtgraph import functions as fn
from ..plot_widgets.plot_items import FoamPlotItem, FoamPlotDataItem, CurvePlotItem
from ..misc_widgets import FColor


class Crosshair(QGraphicsItemGroup):
_HALF_LENGTH = 40
_HALF_RADIUS = 2 * _HALF_LENGTH

def __init__(self, parent=None):
super().__init__(parent)

crosshair_pen = FColor.mkPen("r", width=3)
circle_pen = FColor.mkPen("k", width=2)

horiz_crosshair = QGraphicsLineItem()
vertical_crosshair = QGraphicsLineItem()
circle = QGraphicsEllipseItem()

horiz_crosshair.setPen(crosshair_pen)
vertical_crosshair.setPen(crosshair_pen)
circle.setPen(circle_pen)

self.addToGroup(horiz_crosshair)
self.addToGroup(vertical_crosshair)
self.addToGroup(circle)

self.setPos(0, 0)
horiz_crosshair.setLine(-self._HALF_LENGTH, 0, self._HALF_LENGTH, 0)
vertical_crosshair.setLine(0, -self._HALF_LENGTH, 0, self._HALF_LENGTH)
circle.setRect(-self._HALF_RADIUS, -self._HALF_RADIUS,
2 * self._HALF_RADIUS, 2 * self._HALF_RADIUS)


class HistogramLUTItem(pg.GraphicsWidget):
"""GraphicsWidget for adjusting the display of an image.

Expand All @@ -81,7 +52,7 @@ def __init__(self, image_item, parent=None):
self._lri = lri

self._hist = CurvePlotItem(pen=FColor.mkPen('k'))
self._hist.rotate(90)
self._hist.setRotation(90)

vb = pg.ViewBox(parent=self)
vb.setMaximumWidth(152)
Expand Down Expand Up @@ -238,7 +209,7 @@ def __init__(self, name=None, *,
self._legend = None
self._axes = {}
self._meter = pg.LabelItem(
'', size='11pt', justify='left', color='6A3D9A', parent=self)
'', size='11pt', justify='left', color='#6A3D9A', parent=self)
self._title = pg.LabelItem('', size='11pt', parent=self)

# context menu
Expand Down Expand Up @@ -387,14 +358,14 @@ def _onLogXChanged(self, state):
for item in chain(self._plot_items, self._plot_items2):
item.setLogX(state)
self.getAxis("bottom").setLogMode(state)
self._vb.autoRange(disableAutoRange=False)
self._vb.enableAutoRange(pg.ViewBox.XAxis)

@pyqtSlot(bool)
def _onLogYChanged(self, state):
for item in self._plot_items:
item.setLogY(state)
self.getAxis("left").setLogMode(state)
self._vb.autoRange(disableAutoRange=False)
self._vb.enableAutoRange(pg.ViewBox.YAxis)

def addItem(self, item, ignore_bounds=False, y2=False):
"""Add a graphics item to ViewBox."""
Expand All @@ -404,7 +375,7 @@ def addItem(self, item, ignore_bounds=False, y2=False):

self._items.add(item)

if isinstance(item, pg.PlotItem):
if isinstance(item, (FoamPlotItem, FoamPlotDataItem)):
if y2:
if self._log_x_cb.isChecked():
item.setLogX(True)
Expand Down
32 changes: 18 additions & 14 deletions extra_foam/gui/plot_widgets/image_items.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,8 @@
pyqtSignal, pyqtSlot, QPoint, QPointF, QRectF, Qt
)

from .. import pyqtgraph as pg
from ..pyqtgraph import Point
from ..pyqtgraph import functions as fn
import pyqtgraph as pg
from pyqtgraph import functions as fn

from ..misc_widgets import FColor
from ...algorithms import quick_min_max
Expand All @@ -41,8 +40,8 @@ class ImageItem(pg.GraphicsObject):
draw_region_changed_sgn = pyqtSignal(int, int) # (x, y)
draw_finished_sgn = pyqtSignal()

def __init__(self, image=None, parent=None):
super().__init__(parent=parent)
def __init__(self, image=None):
super().__init__()

self._image = None # original image data
self._qimage = None # rendered image for display
Expand Down Expand Up @@ -191,8 +190,8 @@ def render(self):
if o is None or x is None or y is None:
return

w = Point(x-o).length()
h = Point(y-o).length()
w = pg.Point(x-o).length()
h = pg.Point(y-o).length()
if w == 0 or h == 0:
self._qimage = None
return
Expand Down Expand Up @@ -234,7 +233,7 @@ def render(self):
levels = None

# TODO: replace fn.makeARGB and fn.makeQImage
argb, alpha = fn.makeARGB(image, lut=lut, levels=levels)
argb, alpha = fn.makeARGB(image, lut=lut, levels=levels, maskNans=False)
self._qimage = fn.makeQImage(argb, alpha, transpose=False)

def paint(self, p, *args):
Expand Down Expand Up @@ -304,6 +303,11 @@ def setScaledMode(self):
"""Slot connected in GraphicsView."""
self.setPxMode(False)

def setScaleXY(self, sx, sy):
tr = self.transform()
tr.scale(sx, sy)
self.setTransform(tr)

def pixelSize(self):
"""Override.

Expand All @@ -319,8 +323,8 @@ def viewTransformChanged(self):
o = self.mapToDevice(QPointF(0, 0))
x = self.mapToDevice(QPointF(1, 0))
y = self.mapToDevice(QPointF(0, 1))
w = Point(x-o).length()
h = Point(y-o).length()
w = pg.Point(x-o).length()
h = pg.Point(y-o).length()
if w == 0 or h == 0:
self._qimage = None
return
Expand Down Expand Up @@ -377,12 +381,12 @@ class MaskItem(pg.GraphicsObject):
_TRANSPARENT = QColor(0, 0, 0, 0)
_COLOR_FORMAT = QImage.Format_ARGB32

def __init__(self, item, parent=None):
def __init__(self, item):
"""Initialization.

:param ImageItem item: a reference to the masked image item.
"""
super().__init__(parent=parent)
super().__init__()
if not isinstance(item, ImageItem):
raise TypeError("Input item must be an ImageItem instance.")

Expand Down Expand Up @@ -560,8 +564,8 @@ def _addHandle(self):


class GeometryItem(pg.GraphicsObject):
def __init__(self, pen=None, brush=None, parent=None):
super().__init__(parent=parent)
def __init__(self, pen=None, brush=None):
super().__init__()

if pen is None and brush is None:
self._pen = FColor.mkPen('b')
Expand Down
4 changes: 2 additions & 2 deletions extra_foam/gui/plot_widgets/image_view_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from PyQt5.QtCore import pyqtSlot, Qt, QTimer
from PyQt5.QtWidgets import QHBoxLayout, QSizePolicy, QWidget

from .. import pyqtgraph as pg
import pyqtgraph as pg

from .graphics_widgets import HistogramLUTItem
from .plot_widget_base import PlotWidgetF
Expand Down Expand Up @@ -207,7 +207,7 @@ def _updateImageImp(self, img, *, auto_range=False, auto_levels=False,
self._image_item.resetTransform()

if scale is not None:
self._image_item.scale(*scale)
self._image_item.setScaleXY(*scale)
if pos is not None:
self._image_item.setPos(*pos)

Expand Down
Loading