title: QCombo box to set layer (for Python QGIS plugin)
body: <p>I'm attempting to create a function to declare a variable in terms of an item chosen in a QComboBox. It's for a plugin for QGIS 2.0 and 2.2. I'm getting a "list index out of range" error, but cannot see why. I'm wondering if my combobox.currentIndex() isn't giving me what I think it is. If this is the case, I wonder if I should find a way set the combo box's index to something by default before the program runs.</p>
  
  <pre><code>#connecting the combo boxes to function
  def initGui(self):
      QObject.connect(self.dlg.ui.indivCombo,SIGNAL("currentIndexChanged(int)"),self.layerChanged)
      QObject.connect(self.dlg.ui.grosCombo,SIGNAL("currentIndexChanged(int)"),self.layerChanged)
      QObject.connect(self.dlg.ui.resCombo,SIGNAL("currentIndexChanged(int)"),self.layerChanged)
  
  #function to set my layer parameter to the equal the item at index chosen
  def layerChanged(self):
      self.layerMap = QgsMapLayerRegistry.instance().mapLayers().values()
      self.indivLayer = self.layerMap[self.dlg.ui.indivCombo.currentIndex()]
      self.grosLayer = self.layerMap[self.dlg.ui.grosCombo.currentIndex()]
      self.resLayer = self.layerMap[self.dlg.ui.resCombo.currentIndex()]
  
  #populating combo box with layers in stack
  def run(self):
      # show the dialog
      self.dlg.show()
      for layer in self.iface.legendInterface().layers():
          if layer.type() == QgsMapLayer.VectorLayer:
              self.dlg.indivCombo.addItem(layer.name())
              self.dlg.grosCombo.addItem(layer.name())
              self.dlg.resCombo.addItem(layer.name())
      # Run the dialog event loop
      result = self.dlg.exec_()
      # See if OK was pressed
      if result == 1:
          pass
  </code></pre>
  
  <p>I've now made some changes to the code thanks to the near-answer below. layerChanged() now uses an identifiers method and run() adds layers to combo box differently based on ideas from thread <a href="http://lists.osgeo.org/pipermail/qgis-developer/2010-November/011505.html" rel="nofollow">http://lists.osgeo.org/pipermail/qgis-developer/2010-November/011505.html</a>. Both areas still give me issues however. "None type object has no attribute mapLayer" for the former and "Syntax error" for the latter.</p>
  
  <pre><code>def layerChanged(self, index):
      #globals previously initialized as None
      global registry, indivID, grosID, resID
      registry = QgsMapLayerRegistry.instance()
      indivID = self.dlg.ui.indivCombo.data(index).toPyObject()
      grosID = self.dlg.ui.grosCombo.data(index).toPyObject()
      resID = self.dlg.ui.resCombo.data(index).toPyObject()
      self.indivLayer = registry.mapLayer(indivID)
      self.grosLayer = registry.mapLayer(grosID)
      self.resLayer = registry.mapLayer(resID)
  
  def calculatelength(self):
      global registry, resID
      self.resLayer = registry.mapLayer(resID)
      idx = self.resLayer.fieldNameIndex('Length')
      #code continues
  
   def run(self):
  
      # show the dialog
      self.dlg.show()
      for layer in self.iface.legendInterface().layers():
          if layer.type() == QgsMapLayer.VectorLayer:
              self.dlg.ui.indivCombo.addItem(layer.name(),QVariant(layer.id())
              self.dlg.ui.grosCombo.addItem(layer.name(),QVariant(layer.id())
              self.dlg.ui.resCombo.addItem(layer.name(),QVariant(layer.id())
      # Run the dialog event loop
      result = self.dlg.exec_()
      # See if OK was pressed
      if result == 1:
          pass
          #AEPStats()
  </code></pre>