Bug report #2006

Python: cannot connect SIGNAL canvasClicked with a function

Added by luca76 - almost 10 years ago. Updated almost 10 years ago.

Status:Closed
Priority:Low
Assignee:Borys Jurgiel
Category:Python plugins
Affected QGIS version: Regression?:No
Operating System:Windows Easy fix?:No
Pull Request or Patch supplied: Resolution:invalid
Crashes QGIS or corrupts data: Copied to github as #:12066

Description

I cannot connect SIGNAL canvasClicked anymore (QGIS 1.3.0)

this:

QObject.connect(emitPoint, QgsPoint &, Qt.MouseButton">SIGNAL"), self.clickButton)

doesn't work anymore.

Neither:

QObject.connect(emitPoint, QgsPoint &, Qt::MouseButton">SIGNAL"), self.clickButton)

attached a simple plugin.

simple_plugin.zip - simple plugin (1.3 KB) luca76 -, 2009-10-13 06:56 AM

History

#1 Updated by Jürgen Fischer almost 10 years ago

  • Resolution set to invalid
  • Status changed from Open to Closed

the latter works. The problem is that your tool is destroyed before you get a chance to use it. Following works:

# Import the [[PyQt]] and QGIS libraries
from [[PyQt]]4.QtCore import * 
from [[PyQt]]4.QtGui import *
from qgis.core import *
from qgis.gui import *

class simplePlugin:

    def +init+(self, iface):
        # Save reference to the QGIS interface
        self.iface = iface

    def initGui(self):
        # Create action that will start plugin configuration
        self.action = QAction(QIcon(":/plugins/totem/icon.png"), "test", self.iface.mainWindow())
        # connect the action to the run method
        QObject.connect(self.action, SIGNAL("activated()"), self.run)
        self.iface.addPluginToMenu("Plugin...", self.action)

    def unload(self):
        # Remove the plugin menu item and icon
        self.iface.removePluginMenu("Plugin...", self.action)
        self.iface.removeToolBarIcon(self.action) 

    def run(self):
        mapCanvas=self.iface.mapCanvas()
        # Create the appropriate map tool and connect the gotPoint() signal.
        self.emitPoint = [[QgsMapToolEmitPoint]](mapCanvas)
        mapCanvas.setMapTool(self.emitPoint)
        QObject.connect(self.emitPoint, SIGNAL("canvasClicked(const [[QgsPoint]] &, Qt::MouseButton)"), self.clickButton)

    def clickButton(self, pnt, but):
        QMessageBox.information(None, "Nome finestra", "cliccato", "&Ok", "&Cancel",  "", 0, 1)

Also available in: Atom PDF