class_docstr: The window frame that lets you add modules to a pipeline
  
      
class_docstr_tok: ["The","window","frame","that","lets","you","add","modules","to","a","pipeline"]
code: def __on_search_modules(self, event):
      self.__module_list_box.Enable(True)
      if (
          len(self.search_text.GetValue()) == 0
          or self.__module_categories_list_box.GetSelection() != -1
      ):
          self.__module_categories_list_box.Select(-1)
          self.__on_category_selected(None)
  
      keys = list(self.__module_dict["All"].keys())
  
      # results in [('Module1', score1, idx1), ('Module2', score2, idx2), ...]
      # where idx is the index of the result in `keys`
      top_scorers = [
          m[0]
          for m in extract(
              self.search_text.GetValue(),
              keys,
              processor=default_process,
              scorer=DamerauLevenshtein.similarity,
              limit=10,
          )
      ]
  
      self.__module_list_box.Clear()
      self.__module_list_box.AppendItems(top_scorers)
      if len(top_scorers) > 0:
          self.__module_list_box.Select(0)
      else:
          self.__module_list_box.AppendItems("No matching modules")
          self.__module_list_box.Enable(False)
  
imports: import wx
  from rapidfuzz.utils import default_process
  from rapidfuzz.process import extract
  from rapidfuzz.distance import DamerauLevenshtein
  from cellprofiler_core.utilities.core.modules import get_module_names, instantiate_module, get_module_class
  import cellprofiler.gui
  import cellprofiler.gui.cpframe
  import cellprofiler.gui.help.search
  import cellprofiler.gui.utilities.icon
  import cellprofiler.modules
label_desc: Use image node_id 11 for calling the AddModuleFrame obj's underlying member method code with example usage: obj.__on_search_modules(event) without return types