77
88from . import utils
99from .box import CollapsibleBox
10+ from .rediotab import RadioTabWidget
1011from .scrollarea import VerticalScrollArea
1112from .widgets import ParameterWidget , BoolParameter
1213
@@ -206,6 +207,9 @@ def values(self) -> dict[str, Any]:
206207 values [name ] = widget .values ()
207208 elif isinstance (widget , CollapsibleBox ):
208209 values [name ] = widget .checked ()
210+ elif isinstance (widget , RadioTabWidget ):
211+ if form := self .form (name .replace ('_enabled' , '' )):
212+ values [name ] = widget .currentWidget () == form
209213 return values
210214
211215 def set_values (self , values : dict ) -> None :
@@ -220,6 +224,10 @@ def set_values(self, values: dict) -> None:
220224 widget .set_values (value )
221225 elif isinstance (widget , CollapsibleBox ):
222226 widget .set_checked (value )
227+ elif isinstance (widget , RadioTabWidget ):
228+ if value :
229+ if form := self .form (name .replace ('_enabled' , '' )):
230+ widget .setCurrentWidget (form )
223231
224232 def set_defaults (self , values : dict ) -> None :
225233 """Set the default values of ParameterWidgets in the form."""
@@ -318,14 +326,23 @@ def add_form(self, form: ParameterForm, checkable: bool = False) -> CollapsibleB
318326
319327 return box
320328
321- def add_forms (self , forms : Sequence [ParameterForm ]) -> QtWidgets .QTabWidget :
322- """Add multiple forms and return the TabWidget."""
329+ def add_forms (
330+ self , forms : Sequence [ParameterForm ], radio : bool = False
331+ ) -> QtWidgets .QTabWidget :
332+ """
333+ Add multiple forms and return the TabWidget. If radio is True, use a
334+ RadioTabWidget which only allows one form to be active.
335+ """
323336
324337 # Validate the names before creating any widgets.
325338 for form in forms :
326339 self ._validate_name (form .name ())
327340
328- tab_widget = QtWidgets .QTabWidget ()
341+ if radio :
342+ tab_widget = RadioTabWidget ()
343+ else :
344+ tab_widget = QtWidgets .QTabWidget ()
345+
329346 for form in forms :
330347 name = form .name ()
331348 self ._widgets [name ] = form
@@ -335,6 +352,9 @@ def add_forms(self, forms: Sequence[ParameterForm]) -> QtWidgets.QTabWidget:
335352 label = utils .title (name )
336353 tab_widget .addTab (form , label )
337354
355+ if radio :
356+ self ._widgets [f'{ name } _enabled' ] = tab_widget
357+
338358 self .add_widget (tab_widget )
339359
340360 return tab_widget
@@ -524,6 +544,8 @@ def widgets(self) -> dict:
524544 widgets [name ] = widget
525545 elif isinstance (widget , CollapsibleBox ):
526546 widgets [name ] = widget
547+ elif isinstance (widget , RadioTabWidget ):
548+ widgets [name ] = widget
527549 return widgets
528550
529551 @staticmethod
0 commit comments