code: def interactive_output(f, controls):
      """Connect widget controls to a function.
  
      This function does not generate a user interface for the widgets (unlike `interact`).
      This enables customisation of the widget user interface layout.
      The user interface layout must be defined and displayed manually.
      """
  
      out = Output()
  
      def observer(change):
          kwargs = {k: v.value for k, v in controls.items()}
          show_inline_matplotlib_plots()
          with out:
              clear_output(wait=True)
              f(**kwargs)
              show_inline_matplotlib_plots()
  
      for k, w in controls.items():
          w.observe(observer, "value")
      show_inline_matplotlib_plots()
      observer(None)
      return out
  
imports: from collections.abc import Iterable, Mapping
  from inspect import signature, Parameter
  from inspect import getcallargs
  from inspect import getfullargspec
  import sys
  from IPython import get_ipython
  from .None import Widget, ValueWidget, Text, FloatSlider, IntSlider, Checkbox, Dropdown, VBox, Button, DOMWidget, Output
  from IPython.display import display, clear_output
  from traitlets import HasTraits, Any, Unicode, observe
  from numbers import Real, Integral
  from warnings import warn
label_desc: Use image node_id 2 for calling a global function with example usage: interactive_output(f, controls) and returns: out