识别PyQgis应用程序中的左右鼠标按钮单击

时间:2015-05-22 07:32:34

标签: python pyqt qgis

大家好,我对PyQt比较陌生。我正在尝试为Qgis创建一个自定义插件,使用户可以通过使用鼠标单击在画布上绘制多边形来选择某些功能,然后执行所选功能与另一个图层的交叉。我想要做的是,当用户右键单击画布时,多边形选择应该停止。为此,我必须识别左右鼠标信号。我已经制作了一个虚拟函数来测试这个功能:

def mousePressEvent(self):
   print "code enters mousePressEvent function"
   if event.buttons() == "Qt::LeftButton"
   print"Left button pressed"

我按如下方式调用此函数:

QObject.connect(self.clickTool,SIGNAL("canvasClicked(QMouseEvent,Qt::MouseButton)"),self.mousePressEvent)

但我无法调用该功能。我想我在canvasClicked部分做错了什么。对此事的任何帮助将不胜感激。在此先感谢:)

1 个答案:

答案 0 :(得分:1)

实现此目的的最佳方法是使用 QgsMapToolEmitPoint 对象。一个例子是:

在你的代码中,创建一个名为emitPoint的变量,并在 run()函数中设置它:

self.emitPoint = QgsMapToolEmitPoint(self.mapCanvas)
QObject.connect(
     self.emitPoint,
     SIGNAL("canvasClicked(const QgsPoint &, Qt::MouseButton)"),
     self.clickedOnMap)

并创建一个函数:

def clickedOnMap(self, pointOnMap, buttonUsed):
  if (button==Qt.LeftButton):
      ....

buttonUsed参数具有枚举Qt :: MenuButtons中的一个值(正如您在链接中看到的那样:http://doc.qt.io/qt-4.8/qt.html#MouseButton-enum)。