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 collapsible QGroupBox with the title text as a toggle button to show/hide 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)[source]#

Bases: PyQt6.QtWidgets.QGroupBox

A collapsible QGroupBox with the title text as a toggle button to show/hide its content

title = ''[source]#
default_collapsed = False[source]#
_settings_key = '_Group Box Collapsed'[source]#
toggle_button[source]#
drag_handle[source]#
content_area[source]#
animation[source]#
collapsed[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)[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)[source]#

Bases: PyQt6.QtWidgets.QLabel

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

resized[source]#
resizeEvent(event)[source]#

Override resize event to emit signal with new dimensions.