Source code for mantidimaging.gui.windows.live_viewer.live_view_widget
# Copyright (C) 2021 ISIS Rutherford Appleton Laboratory UKRI
# SPDX - License - Identifier: GPL-3.0-or-later
from __future__ import annotations
from PyQt5.QtCore import pyqtSignal
from pyqtgraph import GraphicsLayoutWidget, mkPen
from mantidimaging.core.utility.sensible_roi import SensibleROI
from mantidimaging.gui.widgets.mi_mini_image_view.view import MIMiniImageView
from mantidimaging.gui.widgets.zslider.zslider import ZSlider
from mantidimaging.gui.windows.spectrum_viewer.spectrum_widget import SpectrumROI
import numpy as np
[docs]
class LiveViewWidget(GraphicsLayoutWidget):
"""
The widget containing the spectrum plot and the image projection.
@param parent: The parent widget
"""
image: MIMiniImageView
image_shape: tuple[int, int] | None = None
roi_changed = pyqtSignal()
roi_changing = pyqtSignal()
roi_object: SpectrumROI | None = None
def __init__(self) -> None:
super().__init__()
self.image = MIMiniImageView(name="Projection")
self.addItem(self.image, 0, 0)
self.nextRow()
self.z_slider = ZSlider()
self.addItem(self.z_slider)
self.image.enable_message()
self.image.set_brightness_percentiles(0, 99)
[docs]
def show_image(self, image: np.ndarray) -> None:
"""
Show the image in the image view.
@param image: The image to show
"""
self.image_shape = (np.shape(image)[0], np.shape(image)[1])
self.image.setImage(image)
[docs]
def handle_deleted(self) -> None:
"""
Handle the deletion of the image.
"""
self.image.clear()
[docs]
def add_roi(self) -> None:
if self.image_shape is None:
return
height, width = self.image_shape
roi = SensibleROI.from_list([0, 0, width, height])
self.roi_object = SpectrumROI('roi', roi, rotatable=False, scaleSnap=True, translateSnap=True)
self.roi_object.colour = (255, 194, 10, 255)
self.roi_object.hoverPen = mkPen(self.roi_object.colour, width=3)
self.roi_object.sigRegionChangeFinished.connect(self.roi_changed.emit)
self.roi_object.sigRegionChanged.connect(self.roi_changing.emit)
self.image.vb.addItem(self.roi_object)
[docs]
def get_roi(self) -> SensibleROI | None:
if not self.roi_object:
return None
return self.roi_object.as_sensible_roi()
[docs]
def set_roi_visibility_flags(self, visible: bool) -> None:
if not self.roi_object:
return
handles = self.roi_object.getHandles()
for handle in handles:
handle.setVisible(visible)
self.roi_object.setVisible(visible)