docs: def timer_fired(self):
          """Polling loop for events from other threads"""
          self.__process_idle_events()
  
          # grab the simulation lock, gather all of the
          # wpilib objects, and display them on the screen
          self.update_widgets()
  
          # call next timer_fired (or we'll never call timer_fired again!)
          delay = 100  # milliseconds
          self.root.after(delay, self.timer_fired)