def create_string_entry_subform(self):
        """Create form for string entry arguments."""
        ### define an starting offset
        offset = 5, 30

        ### create list to hold widget
        string_entry_subform = List2D()

        ### instantiate value argument widgets

        ## define argument name
        arg_name = "value"

        ## instantiate and store text object

        text_obj = get_text_obj(reference_rect=self.rect, offset=offset, text=arg_name)

        string_entry_subform.append(text_obj)

        ## define needed arguments, instantiate and store
        ## widget for the string entry value

        ## define widget name
        widget_name = arg_name

        ## define position data

        offset = 65, offset[1] + 5
        coordinates_name = "topleft"
        coordinates_value = self.rect.move(offset).topleft

        ## instantiate and store

        value_entry = StringEntry(
            loop_holder=self,
            name=widget_name,
            draw_on_window_resize=self.draw,
            coordinates_name=coordinates_name,
            coordinates_value=coordinates_value,
        )

        string_entry_subform.append(value_entry)

        ### instantiate validation_command argument widgets

        ## define argument name
        arg_name = "validation_command"

        ## update offset
        offset = 5, offset[1] + 25

        ## instantiate and store text object

        text_obj = get_text_obj(reference_rect=self.rect, offset=offset, text=arg_name)

        string_entry_subform.append(text_obj)

        ### define needed arguments, instantiate and store
        ### widget for the string entry validation_command
        ### argument

        ## define widget name
        widget_name = arg_name

        ## define position data

        offset = 170, offset[1] + 5
        coordinates_name = "topleft"
        coordinates_value = self.rect.move(offset).topleft

        ## define options
        options = list(VALIDATION_COMMAND_MAP.keys())

        ## instantiate and store

        validation_command_option_menu = OptionMenu(
            name=widget_name,
            loop_holder=self,
            value=options[0],
            options=options,
            draw_on_window_resize=self.draw,
            coordinates_name=coordinates_name,
            coordinates_value=coordinates_value,
        )

        string_entry_subform.append(validation_command_option_menu)

        def update_value_entry_validation():
            """Update validation command of string entry."""
            value = validation_command_option_menu.get()

            try:
                value_entry.validation_command = value

            except Exception as err:

                ### set option menu value to None
                validation_command_option_menu.set(None)

                ### communicate the problem to the user

                msg = (
                    "The validation could not be set because"
                    " the value doesn't comply."
                )

                logger.exception(msg)
                USER_LOGGER.exception(msg)

                preview = ' '.join(str(err).splitlines())[:200] # 200 chars

                dialog_msg = msg + (
                    " Check the user log for more details (on the"
                    " graph/canvas, press <Ctrl+Shift+j> or access the"
                    " \"Help > Show user log\" option on the menubar)."
                    f" Here's a preview of the error message: {preview}"
                )

                create_and_show_dialog(dialog_msg, level_name='error')

        validation_command_option_menu.command = update_value_entry_validation

        ### finally store the subform list in the
        ### subform map
        self.subform_map["string_entry"] = string_entry_subform
Create form for string entry arguments.
nodezator/editing/widgetpicker/subforms.py