magscope.ui.widgets

Contents

magscope.ui.widgets#

” Miscellaneous custom Qt widgets for the GUI

Classes#

LabeledLineEditWithValue

Horizontally combined QLabel, QLineedit, and a second QLabel to show the value.

LabeledLineEdit

Horizontally combined QLabel and QLineedit.

LabeledCheckbox

Horizontally combined QLabel and QCheckbox.

LabeledStepperLineEdit

Horizontally combined QLabel and QLineedit with a QButton to increment/decrement the value on either side.

CollapsibleGroupBox

A titled QGroupBox that can optionally collapse its content.

GripHandle

Simple class for adding '...' to QSplitter handles.

GripSplitter

Simple class for adding '...' to QSplitter handles.

BeadGraphic

FlashLabel

ResizableLabel

Custom QLabel that emits a signal when it's resized.

Module Contents#

class magscope.ui.widgets.LabeledLineEditWithValue(*, label_text: str, validator: PyQt6.QtGui.QValidator = None, widths: tuple[int, int, int] = (0, 0, 0), default=None, callback: callable = None)[source]#

Bases: PyQt6.QtWidgets.QWidget

Horizontally combined QLabel, QLineedit, and a second QLabel to show the value.

layout[source]#
label[source]#
lineedit[source]#
value_label[source]#
class magscope.ui.widgets.LabeledLineEdit(*, label_text: str, widths: tuple[int, int] = (0, 0), default=None, validator: PyQt6.QtGui.QValidator = None, callback: callable = None)[source]#

Bases: PyQt6.QtWidgets.QWidget

Horizontally combined QLabel and QLineedit.

layout[source]#
label[source]#
lineedit[source]#
class magscope.ui.widgets.LabeledCheckbox(*, label_text: str, widths: tuple[int, int] = (0, 0), default=False, callback: callable = None)[source]#

Bases: PyQt6.QtWidgets.QWidget

Horizontally combined QLabel and QCheckbox.

layout[source]#
label[source]#
checkbox[source]#
class magscope.ui.widgets.LabeledStepperLineEdit(*, label_text: str, left_button_text: str, right_button_text: str, widths: tuple[int, int, int, int] = (0, 0, 0, 0), default=None, validator: PyQt6.QtGui.QValidator = None, callbacks: tuple[callable, callable, callable] = (None, None, None))[source]#

Bases: PyQt6.QtWidgets.QWidget

Horizontally combined QLabel and QLineedit with a QButton to increment/decrement the value on either side.

layout[source]#
name_label[source]#
left_button[source]#
lineedit[source]#
right_button[source]#
class magscope.ui.widgets.CollapsibleGroupBox(title='', collapsed=False, *, collapsible: bool = True)[source]#

Bases: PyQt6.QtWidgets.QGroupBox

A titled QGroupBox that can optionally collapse its content.

_DEFAULT_BORDER_COLOR = 'palette(mid)'[source]#
_DEFAULT_BORDER_WIDTH = 1[source]#
title = ''[source]#
collapsible = True[source]#
default_collapsed = False[source]#
_border_color = 'palette(mid)'[source]#
_border_width = 1[source]#
_settings_key = '_Group Box Collapsed'[source]#
toggle_button[source]#
drag_handle[source]#
content_area[source]#
animation[source]#
collapsed[source]#
set_highlight_border(color_name: str | None) None[source]#
_apply_panel_style() None[source]#
_animation_finished() None[source]#
property settings_key: str[source]#
toggle(checked)[source]#
reset_to_default() None[source]#
_apply_collapsed_state(collapsed: bool, *, animate: bool, persist: bool) None[source]#
setContentLayout(content_layout)[source]#
static _get_toggle_text(title, expanded, *, collapsible: bool = True)[source]#
class magscope.ui.widgets.GripHandle(orientation, parent)[source]#

Bases: PyQt6.QtWidgets.QSplitterHandle

Simple class for adding ‘…’ to QSplitter handles.

released: PyQt6.QtCore.pyqtSignal[source]#
_pressed = False[source]#
mousePressEvent(e)[source]#
mouseReleaseEvent(e)[source]#
enterEvent(e)[source]#
leaveEvent(e)[source]#
paintEvent(event)[source]#
class magscope.ui.widgets.GripSplitter(orientation, name=None, parent=None)[source]#

Bases: PyQt6.QtWidgets.QSplitter

Simple class for adding ‘…’ to QSplitter handles.

name = None[source]#
shown_once = False[source]#
showEvent(e)[source]#
createHandle()[source]#
handle_released()[source]#
class magscope.ui.widgets.BeadGraphic(parent: magscope.ui.ui.UIManager, id: int, roi: tuple[int, int, int, int], view_scene)[source]#

Bases: PyQt6.QtWidgets.QGraphicsRectItem

LABEL_FONT[source]#
LABEL_COLOR[source]#
LABEL_OFFSET_X = 10[source]#
LABEL_OFFSET_Y = 1[source]#
BORDER_COLOR_DEFAULT = (0, 255, 255, 255)[source]#
FILL_COLOR_DEFAULT = None[source]#
BORDER_COLOR_SELECTED = (255, 0, 0, 255)[source]#
FILL_COLOR_SELECTED = None[source]#
BORDER_COLOR_REFERENCE = (0, 255, 0, 255)[source]#
FILL_COLOR_REFERENCE = None[source]#
HOVER_BORDER_COLOR = (255, 96, 96, 255)[source]#
DRAG_BORDER_COLOR = (255, 255, 255, 255)[source]#
IDLE_PEN_WIDTH = 0[source]#
HOVER_PEN_WIDTH = 2[source]#
SELECTED_PEN_WIDTH = 2[source]#
DRAG_PEN_WIDTH = 3[source]#
CORNER_GRIP_SIZE = 6.0[source]#
_shared_pens: dict[str, PyQt6.QtGui.QPen] | None = None[source]#
_shared_brushes: dict[str, PyQt6.QtGui.QBrush] | None = None[source]#
_parent: magscope.ui.ui.UIManager[source]#
id: int[source]#
_initializing: bool = True[source]#
_is_moving: bool = False[source]#
_is_hovered: bool = False[source]#
_locked: bool[source]#
_color_state: str = 'default'[source]#
_cached_roi: tuple[int, int, int, int] | None = None[source]#
pen_width = 0[source]#
label[source]#
property locked[source]#
view_scene[source]#
remove()[source]#
classmethod roi_from_center(x: float, y: float, width: float) tuple[int, int, int, int][source]#
classmethod label_scene_position_for_roi(roi: tuple[int, int, int, int]) PyQt6.QtCore.QPointF[source]#
classmethod clamp_roi_to_scene(roi: tuple[int, int, int, int], scene_rect: PyQt6.QtCore.QRectF) tuple[int, int, int, int][source]#
classmethod move_roi(roi: tuple[int, int, int, int], dx: int, dy: int, scene_rect: PyQt6.QtCore.QRectF) tuple[int, int, int, int][source]#
set_selection_state(state: str)[source]#

Update the bead overlay color to match selection/reference state.

classmethod _ensure_shared_pens_and_brushes() None[source]#
static _create_pen(color: tuple[int, int, int, int]) PyQt6.QtGui.QPen[source]#
static _create_brush(color: tuple[int, int, int, int] | None) PyQt6.QtGui.QBrush[source]#
_apply_color()[source]#
_current_visual_state() str[source]#
_current_border_color() PyQt6.QtGui.QColor[source]#
_current_pen_width() int[source]#
_update_cursor() None[source]#
_corner_grip_rects() list[PyQt6.QtCore.QRectF][source]#
_paint_rect() PyQt6.QtCore.QRectF[source]#
_current_scene_rect() PyQt6.QtCore.QRectF[source]#
paint(painter, option, widget=None)[source]#
move(dx, dy)[source]#
validate_move(value)[source]#

Prevents the graphic from moving outside the scene border

get_label_scene_position() PyQt6.QtCore.QPointF[source]#
set_roi_bounds(roi: tuple[int, int, int, int]) None[source]#
itemChange(change, value)[source]#
hoverEnterEvent(event)[source]#
hoverLeaveEvent(event)[source]#
mousePressEvent(event)[source]#
mouseReleaseEvent(event)[source]#
on_move_completed()[source]#
get_roi_bounds() tuple[int, int, int, int][source]#
_update_cached_roi()[source]#
class magscope.ui.widgets.FlashLabel(text='')[source]#

Bases: PyQt6.QtWidgets.QLabel

_flash_progress = 0.0[source]#
_timer[source]#
_step = 0[source]#
_update_flash()[source]#
setText(text)[source]#
class magscope.ui.widgets.ResizableLabel(parent=None, *, ignore_pixmap_size_hint: bool = False)[source]#

Bases: PyQt6.QtWidgets.QLabel

Custom QLabel that emits a signal when it’s resized.

resized[source]#
_ignore_pixmap_size_hint = False[source]#
sizeHint() PyQt6.QtCore.QSize[source]#
minimumSizeHint() PyQt6.QtCore.QSize[source]#
resizeEvent(event)[source]#

Override resize event to emit signal with new dimensions.