[Qgis-developer] Need help with Plugin button behavior connected to SIGNAL("selectionChanged()")
Denis Rouzaud
denis.rouzaud at gmail.com
Thu Aug 22 05:38:49 PDT 2013
Btw, I have created a pull request for this. Hopefully, it will be in
core for 2.1 !
On 08/22/2013 02:11 PM, Alexandre Neto wrote:
> Hello all,
>
> I'm updating the Multipart split plugin
> <http://plugins.qgis.org/plugins/splitmultipart/> to make it work with
> the 2.0 API.
>
> Has I have successfully updated the plugin to make it work in 2.0, I
> would like to improve it's button behavior to work like the rest of
> the advanced editing toolbar. I am able to enable and disable it if
> the current layer is editable.
>
> Now I'm trying to get the same behavior if there are selected
> features. I have made it work, but QGIS starts to get really slow... I
> found out that's because lots of connections are being created to
> SIGNAL("selectionChanged()").
>
> Can someone please, point me in the right direction, or tell me where
> can I find some code example doing this?
>
> Thank you very much,
>
> Alexandre Neto
>
> Part of the code bellow:
>
> def initGui(self):
> # Create action that will start plugin configuration
> self.action = QAction(
> QIcon(":/plugins/splitmultipart/icon.svg"),
> QCoreApplication.translate('Multipart split', u"Split
> Selected Multipart features"), self.iface.mainWindow())
> self.action.setEnabled(False)
> # connect to signals for button behavior
> QObject.connect(self.action, SIGNAL("triggered()"), self.run)
> QObject.connect(self.iface,
> SIGNAL("currentLayerChanged(QgsMapLayer*)"), self.toggle)
> #QObject.connect(self.iface,
> SIGNAL("selectionChanged(QgsMapLayer *)"), self.toggle)
>
> # Add toolbar button and menu item
> self.iface.advancedDigitizeToolBar().addAction(self.action)
> self.iface.editMenu().addAction(self.action)
> def toggle(self):
> mc = self.canvas
> layer = mc.currentLayer()
> # Decide whether the plugin button is enable or disable
> if layer <> None:
> # set enable
> if layer.isEditable():
> QObject.connect(layer,SIGNAL("editingStopped()"),self.toggle)
> QObject.connect(layer, SIGNAL("selectionChanged()"),
> self.toggle)
> QObject.disconnect(layer,SIGNAL("editingStarted()"),self.toggle)
> self.iface.messageBar().pushMessage("Debug"," Connect
> SIGNAL(selectionChanged()",0)
> if layer.selectedFeatureCount() > 0:
> self.action.setEnabled(True)
> else:
> self.action.setEnabled(False)
> # set disable
> else:
> self.action.setEnabled(False)
> QObject.connect(layer,SIGNAL("editingStarted()"),self.toggle)
> QObject.disconnect(layer,SIGNAL("editingStopped()"),self.toggle)
> QObject.disconnect(layer,
> SIGNAL("selectionChanged()"), self.toggle)
> self.iface.messageBar().pushMessage("Debug"," Disconnect
> SIGNAL(selectionChanged()",0)
>
>
> _______________________________________________
> Qgis-developer mailing list
> Qgis-developer at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/qgis-developer
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20130822/1722cf9b/attachment.html>
More information about the Qgis-developer
mailing list