devctrl.gui.widgets.settings#
Settings widget module for editing SettingsClass objects.
This module provides a comprehensive system for creating editable widgets
that display and modify SettingsClass dataclass instances.
The architecture uses a registry-based approach where widget classes for
specific Python types are registered with the FieldWidget base class.
Module Structure#
The module is organized into several internal submodules:
_base: Contains theFieldWidgetbase class with type registry_types_simple: Field widgets for simple types (bool, str, int, float, etc.)_types_container: Field widgets for container types (list, dict, tuple, union)_dialog: Dialog-based field widget for complex nested settings_main: MainSettingsWidgetfor displaying complete settings classes
Widget Types#
The following widget types are available:
FieldWidgetBool: Boolean values (bool)FieldWidgetStr: String values (str)FieldWidgetInt: Integer values (int)FieldWidgetFloat: Floating-point values (float)FieldWidgetNone: None values (NoneType)FieldWidgetChoice: Choice from valid values (using ‘valid’ metadata)FieldWidgetList: List values (list)FieldWidgetDict: Dictionary values (dict)FieldWidgetTuple: Tuple values (tuple)FieldWidgetUnion: Union types (Union, including Optional)FieldWidgetDialog: Dialog-based widget for complex typesSettingsWidget: Main widget forSettingsClassobjects
Usage#
Widget classes are automatically registered for their supported types when
imported. The main entry point is the SettingsWidget class:
from devctrl.gui.widgets.settings import SettingsWidget
from devctrl.utility.settings import SettingsClass, dataclass, field
@dataclass
class MySettings(SettingsClass):
name: str = "default"
count: int = 0
enabled: bool = True
settings = MySettings()
widget = SettingsWidget(settings)
The FieldWidget.create_field_widget() method is used internally to create
appropriate widgets for each field based on its type.