code: def build_tags_part(tags, attr_normal, attr_focus):
      
      part_w = None
      width = None
      tag_widgets = []
      cols = []
      width = -1
  
      # create individual TagWidgets and sort them
      tag_widgets = [TagWidget(t, attr_normal, attr_focus) for t in tags]
      tag_widgets = sorted(tag_widgets)
  
      for tag_widget in tag_widgets:
          if not tag_widget.hidden:
              wrapped_tagwidget = tag_widget
              tag_width = tag_widget.width()
              cols.append(('fixed', tag_width, wrapped_tagwidget))
              width += tag_width + 1
      if cols:
          part_w = urwid.Columns(cols, dividechars=1)
      return width, part_w
docs: create an urwid.Columns widget (wrapped in approproate Attributes)
      to display a list of tag strings, as part of a threadline.
  
      :param tags: list of tag strings to include
      :type tags: list of str
      :param attr_normal: urwid attribute to use if unfocussed
      :param attr_focus: urwid attribute to use if focussed
      :return: overall width in characters and a Columns widget.
      :rtype: tuple[int, urwid.Columns]