mirror of https://github.com/chriskiehl/Gooey.git
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
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)
|
|
|