code: def _propagate_options(self, change):
          "Set the values and labels, and select the first option if we aren't initializing"
          options = self._options_full
          self.set_trait('_options_labels', tuple(i[0] for i in options))
          self._options_values = tuple(i[1] for i in options)
          if self._initializing_traits_ is not True:
              if len(options) > 0:
                  if self.index == 0:
                      # Explicitly trigger the observers to pick up the new value and
                      # label. Just setting the value would not trigger the observers
                      # since traitlets thinks the value hasn't changed.
                      self._notify_trait('index', 0, 0)
                  else:
                      self.index = 0
              else:
                  self.index = Nonf _propagate_options(self, change):
          "Set the values and labels, and select the first option if we aren't initializing"
          options = self._options_full
          self.set_trait('_options_labels', tuple(i[0] for i in options))
          self._options_values = tuple(i[1] for i in options)
          if self._initializing_traits_ is not True:
              if len(options) > 0:
                  if self.index == 0:
                      # Explicitly trigger the observers to pick up the new value and
                      # label. Just setting the value would not trigger the observers
                      # since traitlets thinks the value hasn't changed.
                      self._notify_trait('index', 0, 0)
                  else:
                      self.index = 0
              else:
                  self.index = None
docs: Set the values and labels, and select the first option if we aren't initializing