code: def highlight_problems(self, has_problems):
          
          if has_problems:
              self.validation_mode = set(has_problems)
              # highlighting doesn't work with Windows
              if sys.platform in ['win32', 'win62']:
                  self.message.SetLabel('The following grid(s) have incorrect or incomplete data:\n{}'.format(', '.join(self.validation_mode)))
              # highlighting does work with OSX
              else:
                  for dtype in ["specimens", "samples", "sites", "locations", "ages", "measurements"]:
                      wind = self.FindWindowByName(dtype + '_btn')
                      if dtype not in has_problems:
                          wind.Unbind(wx.EVT_PAINT, handler=self.highlight_button)
                      else:
                          wind.Bind(wx.EVT_PAINT, self.highlight_button)
                  self.Refresh()
                  self.message.SetLabel('Highlighted grids have incorrect or incomplete data')
              self.bSizer_msg.ShowItems(True)
              # manually fire a paint event to make sure all buttons
              # are highlighted/unhighlighted appropriately
              paintEvent = wx.CommandEvent(wx.wxEVT_PAINT,
                                           self.GetId())
              self.GetEventHandler().ProcessEvent(paintEvent)
  
          else:
              self.message.SetLabel("Validated!")
              self.bSizer_msg.ShowItems(True)
          self.hbox.Fit(self)
docs: Outline grid buttons in red if they have validation errors