Add Dispatch_V0.1.1
This commit is contained in:
109
Dispatch_V0.1.1/gui/components/radio_group.py
Normal file
109
Dispatch_V0.1.1/gui/components/radio_group.py
Normal file
@@ -0,0 +1,109 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# gui/components/radio_group.py
|
||||
"""Контейнеризированная обёртка над QButtonGroup."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from PySide6.QtWidgets import QButtonGroup
|
||||
|
||||
from gui.containers.s_container import SContainer
|
||||
|
||||
|
||||
class RadioGroup(SContainer):
|
||||
"""Логическая группа RadioButton с взаимоисключающим выбором.
|
||||
|
||||
Оборачивает ``QButtonGroup`` в ``SContainer``-совместимый компонент,
|
||||
исключая прямое использование Qt-классов в прикладном коде.
|
||||
|
||||
Визуально компонент невидим (zero-size), используется только для
|
||||
логической привязки RadioButton друг к другу.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
exclusive: bool = True,
|
||||
parent=None,
|
||||
):
|
||||
super().__init__(
|
||||
width_percent=None,
|
||||
height_percent=None,
|
||||
margin=0,
|
||||
parent=parent,
|
||||
)
|
||||
self.setFixedSize(0, 0)
|
||||
self._group = QButtonGroup(self)
|
||||
self._group.setExclusive(exclusive)
|
||||
|
||||
# ── Публичный API ─────────────────────────────────────────────
|
||||
|
||||
def add_button(self, radio_button) -> None:
|
||||
"""Добавить ``RadioButton`` в группу."""
|
||||
radio_button.add_to_group(self._group)
|
||||
|
||||
def set_exclusive(self, exclusive: bool) -> None:
|
||||
self._group.setExclusive(exclusive)
|
||||
|
||||
def is_exclusive(self) -> bool:
|
||||
return self._group.exclusive()
|
||||
|
||||
@property
|
||||
def button_clicked(self):
|
||||
"""Сигнал ``QButtonGroup.buttonClicked``."""
|
||||
return self._group.buttonClicked
|
||||
|
||||
@property
|
||||
def button_toggled(self):
|
||||
"""Сигнал ``QButtonGroup.buttonToggled``."""
|
||||
return self._group.buttonToggled
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Module workflow notes
|
||||
# ---------------------------------------------------------------------------
|
||||
#
|
||||
# 1) Назначение модуля:
|
||||
# Логическая группа RadioButton с взаимоисключающим выбором,
|
||||
# оборачивающая QButtonGroup в SContainer-совместимый компонент.
|
||||
# Визуально невидим (fixedSize 0×0), используется только для
|
||||
# логической привязки.
|
||||
#
|
||||
# 2) Зависимости модуля:
|
||||
# Импорты: QButtonGroup (PySide6.QtWidgets),
|
||||
# SContainer (gui.containers.s_container)
|
||||
# Хост-класс / базовый класс: SContainer
|
||||
# Внешние библиотеки: PySide6 (обязательна)
|
||||
#
|
||||
# 3) Экспорт:
|
||||
# Класс RadioGroup — публичный компонент логической группировки.
|
||||
# Методы: add_button(RadioButton), set_exclusive(bool), is_exclusive().
|
||||
# Свойства: button_clicked, button_toggled (сигналы QButtonGroup).
|
||||
#
|
||||
# 4) Состояние (поля):
|
||||
# _group: QButtonGroup — внутренняя группа кнопок
|
||||
#
|
||||
# 5) Последовательность действий и вызовов:
|
||||
# __init__(exclusive=True, parent=None)
|
||||
# -> super().__init__(...) -> setFixedSize(0, 0)
|
||||
# -> QButtonGroup(self) -> setExclusive(exclusive)
|
||||
# add_button(radio_button)
|
||||
# -> radio_button.add_to_group(_group)
|
||||
# (делегирует RadioButton → group.addButton)
|
||||
#
|
||||
# 6) Побочные эффекты:
|
||||
# - Модифицирует QButtonGroup (добавление кнопок, смена exclusive).
|
||||
# - Размер виджета зафиксирован 0×0 — невидимый.
|
||||
#
|
||||
# 7) Границы ответственности:
|
||||
# Модуль НЕ управляет визуальным представлением кнопок.
|
||||
# НЕ применяет стили. НЕ подключается к theme_bus.
|
||||
#
|
||||
# 8) Обработка ошибок:
|
||||
# Нет явной обработки. Ожидает корректный RadioButton на входе.
|
||||
#
|
||||
# 9) Инварианты и контракты:
|
||||
# - По умолчанию exclusive=True — только одна кнопка может быть выбрана.
|
||||
# - FixedSize(0, 0) — виджет не занимает место в layout.
|
||||
#
|
||||
# 10) Правило сопровождения:
|
||||
# Не добавлять визуальные элементы. Не менять размер с 0×0.
|
||||
# add_button() принимает только RadioButton (не QRadioButton напрямую).
|
||||
Reference in New Issue
Block a user