Si colocas tus entradas de menú plugin en uno de estos menús(Raster, Vector, Base de Datos o Web), deberías modificar el código de las funciones initGui()
y unload()
. Como estos nuevos menús están disponibles sólo en QGIS 2.0, el primer paso es ocmprobar que la versión que utilizas de QGIS tiene todas las funciones necesarias. Si los nuevos menús están disponibles, pondremos nuestro plugin bajo este menú, de otra forma, utilizaremos el viejo menú Plugins. Aquí hay un ejemplo para el menú Raster:
def initGui(self):
# create action that will start plugin configuration
self.action = QAction(QIcon(":/plugins/testplug/icon.png"), "Test plugin", \
self.iface.mainWindow())
self.action.setWhatsThis("Configuration for test plugin")
self.action.setStatusTip("This is status tip")
QObject.connect(self.action, SIGNAL("triggered()"), self.run)
# check if Raster menu available
if hasattr(self.iface, "addPluginToRasterMenu"):
# Raster menu and toolbar available
self.iface.addRasterToolBarIcon(self.action)
self.iface.addPluginToRasterMenu("&Test plugins", self.action)
else:
# there is no Raster menu, place plugin under Plugins menu as usual
self.iface.addToolBarIcon(self.action)
self.iface.addPluginToMenu("&Test plugins", self.action)
# connect to signal renderComplete which is emitted when canvas rendering is done
QObject.connect(self.iface.mapCanvas(), SIGNAL("renderComplete(QPainter *)"), \
self.renderTest)
def unload(self):
# check if Raster menu available and remove our buttons from appropriate
# menu and toolbar
if hasattr(self.iface, "addPluginToRasterMenu"):
self.iface.removePluginRasterMenu("&Test plugins",self.action)
self.iface.removeRasterToolBarIcon(self.action)
else:
self.iface.removePluginMenu("&Test plugins",self.action)
self.iface.removeToolBarIcon(self.action)
# disconnect from signal of the canvas
QObject.disconnect(self.iface.mapCanvas(), SIGNAL("renderComplete(QPainter *)"), \
self.renderTest)