【问题标题】:Identifying Left and Right Mouse Button Clicks in PyQgis application在 PyQgis 应用程序中识别鼠标左键和右键单击
【发布时间】:2015-05-23 21:20:26
【问题描述】:

大家好,我对 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 部分做错了什么。在这件事上的任何帮助将不胜感激。在此先感谢:)

【问题讨论】:

  • 请忽略缩进错误

标签: python pyqt qgis


【解决方案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)。

【讨论】:

  • 感谢您的回复@luca76 我已经按照您在上面说的做了。在我的代码中,self.clickTool 相当于您的 self.emitPoint。问题是 clickedOnMap 函数无论如何都不会被调用,而且我没有收到任何错误。
  • 你能给我看一些代码吗?我怀疑您缺少一些参数。
  • 我终于做对了。你是对的@luca76。我弄乱了参数,这就是为什么没有调用该函数的原因,尽管我想知道为什么它没有抛出任何错误。无论如何感谢您的帮助:)
  • 抱歉没有足够的 repo :)
  • 好的 :-) 祝你有美好的一天!
猜你喜欢
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多