code: def refresh_instruments(self):
          
          def list_access_nested_dict(dict, somelist):
              """
              Allows one to use a list to access a nested dictionary, for example:
              listAccessNestedDict({'a': {'b': 1}}, ['a', 'b']) returns 1
              Args:
                  dict:
                  somelist:
  
              Returns:
  
              """
              return reduce(operator.getitem, somelist, dict)
  
          def update(item):
              if item.isExpanded():
                  for index in range(item.childCount()):
                      child = item.child(index)
  
                      if child.childCount() == 0:
                          instrument, path_to_instrument = child.get_instrument()
                          path_to_instrument.reverse()
                          try: #check if item is in probes
                              value = instrument.read_probes(path_to_instrument[-1])
                          except AssertionError: #if item not in probes, get value from settings instead
                              value = list_access_nested_dict(instrument.settings, path_to_instrument)
                          child.value = value
                      else:
                          update(child)
  
          #need to block signals during update so that tree.itemChanged doesn't fire and the gui doesn't try to
          #reupdate the instruments to their current value
          self.tree_settings.blockSignals(True)
  
          for index in range(self.tree_settings.topLevelItemCount()):
              instrument = self.tree_settings.topLevelItem(index)
              update(instrument)
  
          self.tree_settings.blockSignals(False)
docs: if self.tree_settings has been expanded, ask instruments for their actual values