code: def _detach(self, item):
          
          to_detach = []
          children_det = []
          children_match = False
          match_found = False
  
          value = self.filtervar.get()
          txt = self.treeview.item(item, 'text').lower()
          if value in txt:
              match_found = True
          else:
              class_txt = self.treedata[item].get_class().lower()
              if value in class_txt:
                  match_found = True
  
          parent = self.treeview.parent(item)
          idx = self.treeview.index(item)
          children = self.treeview.get_children(item)
          if children:
              for child in children:
                  match, detach = self._detach(child)
                  children_match = children_match | match
                  if detach:
                      children_det.extend(detach)
  
          if match_found:
              if children_det:
                  to_detach.extend(children_det)
          else:
              if children_match:
                  if children_det:
                      to_detach.extend(children_det)
              else:
                  to_detach.append((item, parent, idx))
          match_found = match_found | children_match
          return match_found, to_detach
docs: Hide items from treeview that do not match the search string.