You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
1.1 KiB

from collections import namedtuple
from gooey.gui.widgets import components
is_required = lambda widget: widget['required']
is_checkbox = lambda widget: isinstance(widget, components.CheckBox)
ComponentList = namedtuple('ComponentList', 'required_args optional_args')
def build_components(widget_list):
'''
:param widget_list: list of dicts containing widget info (name, type, etc..)
:return: ComponentList
Converts the Json widget information into concrete wx Widget types
'''
required_args, optional_args = partition(widget_list, is_required)
checkbox_args, general_args = partition(map(build_widget, optional_args), is_checkbox)
required_args = map(build_widget, required_args)
optional_args = general_args + checkbox_args
return ComponentList(required_args, optional_args)
def build_widget(widget_info):
widget_class = getattr(components, widget_info['type'])
return widget_class(data=widget_info['data'])
def partition(collection, condition):
return filter(condition, collection), filter(lambda x: not condition(x), collection)