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 the FieldWidget base 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: Main SettingsWidget for 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 types

  • SettingsWidget: Main widget for SettingsClass objects

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.