Source code for canns.pipeline.asa_gui.views.widgets.image_tab

"""Image tab widget."""

from __future__ import annotations

from pathlib import Path

from PySide6.QtCore import QUrl
from PySide6.QtGui import QDesktopServices
from PySide6.QtWidgets import QHBoxLayout, QLabel, QPushButton, QVBoxLayout, QWidget

from .image_viewer import ImageViewer


[docs] class ImageTab(QWidget): def __init__(self, title: str) -> None: super().__init__() self._title = title self._path: Path | None = None layout = QVBoxLayout(self) header_row = QHBoxLayout() self._header = QLabel(title) self._header.setStyleSheet("font-weight: 600;") header_row.addWidget(self._header) header_row.addStretch(1) self._btn_open = QPushButton("Open Image") self._btn_open.setEnabled(False) self._btn_open.clicked.connect(self._open_image) header_row.addWidget(self._btn_open) layout.addLayout(header_row)
[docs] self.viewer = ImageViewer()
layout.addWidget(self.viewer, 1)
[docs] def set_image(self, path: Path | str | None) -> None: if path is None: self._header.setText(self._title) self._path = None self._btn_open.setEnabled(False) else: path = Path(path) self._header.setText(f"{self._title}{path.name}") self._path = path self._btn_open.setEnabled(path.exists()) self.viewer.set_image(path)
def _open_image(self) -> None: if self._path is None or not self._path.exists(): return QDesktopServices.openUrl(QUrl.fromLocalFile(str(self._path)))