code: def __create_search_panel(self):
      def __on_search(results_view):
          search_text = search_text_ctrl.GetValue()
  
          html = search_module_help(search_text)
  
          if html is None:
              no_results_message = """\
  <html>
  <head>
      <title>"{search_text}" not found in help</title>
  </head>
  <body>
      <header></header>Could not find "{search_text}" in CellProfiler's help documentation
  </body>
  </html>
          """.format(
                  **{"search_text": search_text}
              )
  
              results_view.SetPage(no_results_message)
          else:
              results_view.SetPage(html)
  
      sizer = wx.BoxSizer(wx.HORIZONTAL)
  
      sizer.Add(
          wx.StaticText(self, label="Search:"),
          0,
          wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
      )
  
      sizer.AddSpacer(2)
  
      search_text_ctrl = wx.TextCtrl(self)
  
      sizer.Add(search_text_ctrl, 1, wx.EXPAND)
  
      search_button = wx.Button(self, label="Search")
  
      search_button.SetDefault()
  
      search_button.Bind(
          wx.EVT_BUTTON, lambda _: __on_search(self.results_view)
      )
  
      sizer.AddSpacer(2)
  
      sizer.Add(search_button, 0, wx.EXPAND)
  
      return sizer
  
imports: import os
  import re
  import wx
  import wx.html
  from cellprofiler_core.preferences import get_plugin_directory
  from cellprofiler_core.utilities.core.modules import instantiate_module, get_module_names
  import cellprofiler.gui
  import cellprofiler.gui.help.content
  import cellprofiler.gui.html.utils
  import cellprofiler.gui.utilities.icon
  import cellprofiler.modules
label_desc: Use image node_id 3 for calling the Search obj's underlying member method code with example usage: obj.__create_search_panel() and returns: sizer