Hi Giuseppe and Alexander Thank you for the help - both of you. I followed your instructions and can now pick file names of loaded layers.
Also, as you suggested, I realised that I needed to study the Qt4 interface and have gone through most of the tutorials ( http://zetcode.com/tutorials/pyqt4) The only things I had to change was - that the layerCombo lives in 'dlg.ui' and not 'self' since I am using a skeleton generated by the plugin generator. Is that OK? - that the method in layerCombo to add layers is 'addItem' and not 'append' :-) With that loaded layer names show up in the combo and after selection the fully qualified filename is returned by layer.source() However, if I want a handle to an active layer, like I got with self.iface.mapCanvas().currentLayer() is there any way that could be obtained from the layer object? Grateful for your advice. Cheers and thanks Ole On Thu, Dec 8, 2011 at 7:46 PM, Giuseppe Sucameli <sucam...@faunalia.it>wrote: > 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