Hi Ole, On Thu, Dec 8, 2011 at 3:54 AM, Ole Nielsen <ole.moller.niel...@gmail.com> wrote: > I am maybe looking for a file or layer selection combo and > a hint on how to make it work.
First create a combo in your UI named "layerCombo" Then populate the combo running: self.layers = self.iface.legendInterface().layers() # store the layer list self.layerCombo.clear() # clear the combo for layer in self.layers: # foreach layer in legend self.layerCombo.append( layer.name() ) # add it to the combo When you have to get the layer selected in the combo, just us the following snippet: index = self.layerCombo.currentIndex() if index < 0: # it may occur if there's no layer in the combo/legend else: layer = self.layers[ index ] # get the layer by index from the previous stored list source = layer.source() # get the layer source I haven't tried the previous code, so it could contains errors. > I have very limited experience with UIs so please forgive me my basic > questions. Look at QT tutorials, they contain everything you need to know about UI creation. Cheers. > > Cheers and thanks > Ole > > On Wed, Dec 7, 2011 at 8:57 PM, Alexander Bruy <alexander.b...@gmail.com> > wrote: >> >> Hi Ole, >> >> 2011/12/7 Ole Nielsen <ole.moller.niel...@gmail.com>: >> > Sorry, I was perhaps not as clear as I could have been. I have already >> > written plugins using the currentLayer option. What I need now is to >> > combine >> > two layers for a specific analysis. So I imagine being able to select >> > them >> > through the plugin GUI selection combos and return the two layer handles >> > to >> > the Python code in the same format as what is provided by current layer. >> > However, I have no idea how to start doing this. >> >> Ah, understand. That's not so difficult. You need to get layer name >> from combobox, >> then find layer by name. Here is small function that did this work for you >> >> def getVectorLayerByName( layerName ): >> layerMap = QgsMapLayerRegistry.instance().mapLayers() >> for name, layer in layerMap.iteritems(): >> if layer.type() == QgsMapLayer.VectorLayer and layer.name() == >> layerName: >> if layer.isValid(): >> return layer >> else: >> return None >> >> So in your code you can simply do something like this >> >> layerA = getVectorLayerByName( self.cmbLayerA.currentText() ) >> layerB = getVectorLayerByName( self.cmbLayerB.currentText() ) >> >> Hope this helps >> >> -- >> Alexander Bruy >> NextGIS > > > > _______________________________________________ > Qgis-developer mailing list > Qgis-developer@lists.osgeo.org > http://lists.osgeo.org/mailman/listinfo/qgis-developer > -- Giuseppe Sucameli _______________________________________________ Qgis-developer mailing list Qgis-developer@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/qgis-developer