3

I am trying to extend some concepts in the QGIS Workshop tutorial. Basically, I would like to check if the layer is of type "QGSVectorLayer". In the QGIS Python console, I am able to type

canvas = qgis.utils.iface.mapCanvas()
cLayer = canvas.currentLayer()
type(cLayer).__name__

with no problem. However, when attempting the same from the plugin, I get the following error message:

if type(self.cLayer).name == "QgsVectorLayer": NameError: global name 'cLayer' is not defined

The code is as follows:

def handleLayerChange(self, layer):
        self.cLayer = self.canvas.currentLayer()
        if self.cLayer:
            if type(self.cLayer).__name__ == "QgsVectorLayer":
                self.provider = self.cLayer.dataProvider()
user1420372
  • 205
  • 3
  • 7

2 Answers2

10

Another way is testing against the desired class type, like this:

from qgis.core import QgsVectorLayer

# ...
if isinstance(layer, QgsVectorLayer):
    # ...
KitKat
  • 201
  • 2
  • 3
9

You don't need to compare it using strings or the name of the type. You should just do:

 layer.type() == QgsMapLayer.VectorLayer
Nathan W
  • 34,706
  • 5
  • 97
  • 148
  • Thanks, this is much better. I did end up getting the other method to work by converting it to a string; if str(type(self.cLayer).name) == "QgsVectorLayer" – user1420372 May 09 '13 at 22:52
  • The pythonic, recommended way is using isinstance as suggested in @KitKat's answer! – bugmenot123 Feb 08 '23 at 09:49