code: def on_mouse_motion(self, event):
      x, y = self.grid.CalcUnscrolledPosition(event.GetPosition())
      row = self.grid.YToRow(y)
      col = self.grid.XToCol(x)
      this_pos = (row, col)
      if (
          this_pos != self.last_pos
          and row >= 0
          and col >= 0
          and row < len(self.v.data)
          and col < len(self.v.data[row])
      ):
          self.last_pos = this_pos
          s = self.v.data[row][col]
          if s is None:
              s = ""
          elif not isinstance(s, str):
              s = str(s)
          self.grid.GetGridWindow().SetToolTip(s)
      event.Skip()
  
imports: import wx
  import wx.grid
  from cellprofiler_core.preferences import get_error_color
  from cellprofiler_core.setting import Table
label_desc: Use image node_id 4 for calling the TableController obj's underlying member method code with example usage: obj.on_mouse_motion(event) without return types