Bases: QTabWidget
A widget offering to select a layer from napari or a path from disk.
Parameters:
Name | Type | Description | Default |
prediction_signal | PredConfigurationSignal | Signal to be updated with changed in widgets values. | None |
Source code in src/careamics_napari/widgets/predict_data_widget.py
| class PredictDataWidget(QTabWidget):
"""A widget offering to select a layer from napari or a path from disk.
Parameters
----------
prediction_signal : PredConfigurationSignal, default=None
Signal to be updated with changed in widgets values.
"""
def __init__(
self: Self,
prediction_signal: Optional[PredictionSignal] = None,
) -> None:
"""Initialize the widget.
Parameters
----------
prediction_signal : PredConfigurationSignal, default=None
Signal to be updated with changed in widgets values.
"""
super().__init__()
self.config_signal = (
PredictionSignal() # type: ignore
if prediction_signal is None
else prediction_signal
)
# QTabs
layer_tab = QWidget()
layer_tab.setLayout(QVBoxLayout())
disk_tab = QWidget()
disk_tab.setLayout(QVBoxLayout())
# add tabs
self.addTab(layer_tab, "From layers")
self.addTab(disk_tab, "From disk")
self.setTabToolTip(0, "Use images from napari layers")
self.setTabToolTip(1, "Use iamges saved on the disk")
# set tabs
self._set_layer_tab(layer_tab)
self._set_disk_tab(disk_tab)
# set actions
if self.config_signal is not None:
self.currentChanged.connect(self._set_data_source)
self._set_data_source(self.currentIndex())
def _set_layer_tab(
self: Self,
layer_tab: QWidget,
) -> None:
"""Set up the layer tab.
Parameters
----------
layer_tab : QWidget
The layer tab.
"""
if _has_napari and napari.current_viewer() is not None:
form = QFormLayout()
form.setFormAlignment(Qt.AlignLeft | Qt.AlignTop)
form.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow)
form.setContentsMargins(12, 12, 0, 0)
widget_layers = QWidget()
widget_layers.setLayout(form)
self.img_pred = layer_choice()
form.addRow("Predict", self.img_pred.native)
layer_tab.layout().addWidget(widget_layers)
# connection actions for images
self.img_pred.changed.connect(self._update_pred_layer)
# to cover the case when image was loaded before the plugin
if self.img_pred.value is not None:
self._update_pred_layer(self.img_pred.value)
else:
# simply remove the tab
self.removeTab(0)
def _set_disk_tab(self: Self, disk_tab: QWidget) -> None:
"""Set up the disk tab.
Parameters
----------
disk_tab : QWidget
The disk tab.
"""
# disk tab
buttons = QWidget()
form = QFormLayout()
form.setFormAlignment(Qt.AlignLeft | Qt.AlignTop)
form.setFieldGrowthPolicy(QFormLayout.AllNonFixedFieldsGrow)
self.pred_images_folder = FolderWidget("Choose")
form.addRow("Predict", self.pred_images_folder)
self.pred_images_folder.setToolTip("Select a folder containing images.")
# add actions
self.pred_images_folder.get_text_widget().textChanged.connect(
self._update_pred_folder
)
buttons.setLayout(form)
disk_tab.layout().addWidget(buttons)
def _set_data_source(self: Self, index: int) -> None:
"""Set the load_from_disk attribute of the signal based on the selected tab.
Parameters
----------
index : int
Index of the selected tab.
"""
if self.config_signal is not None:
self.config_signal.load_from_disk = index == self.count() - 1
def _update_pred_layer(self: Self, layer: Image) -> None:
"""Update the layer attribute of the signal.
Parameters
----------
layer : Image
The selected layer.
"""
if self.config_signal is not None:
self.config_signal.layer_pred = layer
def _update_pred_folder(self: Self, folder: str) -> None:
"""Update the path attribute of the signal.
Parameters
----------
folder : str
The selected folder.
"""
if self.config_signal.path_pred is not None:
self.config_signal.path_pred = folder
|
Initialize the widget.
Parameters:
Name | Type | Description | Default |
prediction_signal | PredConfigurationSignal | Signal to be updated with changed in widgets values. | None |
Source code in src/careamics_napari/widgets/predict_data_widget.py
| def __init__(
self: Self,
prediction_signal: Optional[PredictionSignal] = None,
) -> None:
"""Initialize the widget.
Parameters
----------
prediction_signal : PredConfigurationSignal, default=None
Signal to be updated with changed in widgets values.
"""
super().__init__()
self.config_signal = (
PredictionSignal() # type: ignore
if prediction_signal is None
else prediction_signal
)
# QTabs
layer_tab = QWidget()
layer_tab.setLayout(QVBoxLayout())
disk_tab = QWidget()
disk_tab.setLayout(QVBoxLayout())
# add tabs
self.addTab(layer_tab, "From layers")
self.addTab(disk_tab, "From disk")
self.setTabToolTip(0, "Use images from napari layers")
self.setTabToolTip(1, "Use iamges saved on the disk")
# set tabs
self._set_layer_tab(layer_tab)
self._set_disk_tab(disk_tab)
# set actions
if self.config_signal is not None:
self.currentChanged.connect(self._set_data_source)
self._set_data_source(self.currentIndex())
|