    def __init__(self, height, label=None, name=None, as_string=False, line_wrap=False, parser=None,
                 on_change=None, readonly=False, **kwargs):
        """
        :param height: The required number of input lines for this TextBox.
        :param label: An optional label for the widget.
        :param name: The name for the TextBox.
        :param as_string: Use string with newline separator instead of a list
            for the value of this widget.
        :param line_wrap: Whether to wrap at the end of the line.
        :param parser: Optional parser to colour text.
        :param on_change: Optional function to call when text changes.
        :param readonly: Whether the widget prevents user input to change values.  Default is False.

        Also see the common keyword arguments in :py:obj:`.Widget`.
        """
        super().__init__(name, **kwargs)
        self._label = label
        self._line = 0
        self._column = 0
        self._start_line = 0
        self._start_column = 0
        self._required_height = height
        self._as_string = as_string
        self._line_wrap = line_wrap
        self._parser = parser
        self._on_change = on_change
        self._reflowed_text_cache = None
        self._readonly = readonly
        self._hide_cursor = False
        self._auto_scroll = True
:param height: The required number of input lines for this TextBox.
:param label: An optional label for the widget.
:param name: The name for the TextBox.
:param as_string: Use string with newline separator instead of a list
for the value of this widget.
:param line_wrap: Whether to wrap at the end of the line.
:param parser: Optional parser to colour text.
:param on_change: Optional function to call when text changes.
:param readonly: Whether the widget prevents user input to change values.  Default is False.

Also see the common keyword arguments in :py:obj:`.Widget`.
asciimatics/widgets/textbox.py