2015-05-22 37 views
0

嗨,大家好我是PyQt的新手。我正在嘗試爲Qgis創建一個自定義插件,使用戶可以通過使用鼠標單擊畫布在畫布上繪製多邊形來選擇一些特徵,然後執行所選特徵與另一個圖層的交叉。我想要做的是,當用戶右鍵單擊畫布時,多邊形選擇應該停止。爲此,我必須確定鼠標右鍵和左鍵之間的信號。我做了一個虛擬函數只是爲了測試這個功能:在PyQgis應用程序中識別鼠標左鍵和右鍵點擊

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部分做錯了什麼。任何幫助在這個問題將不勝感激。在此先感謝:)

+0

請忽略縮進錯誤 – Farhan

回答

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)。

+0

感謝您的回覆@ luca76我已經在做你在那裏說的話。在我的代碼中,self.clickTool等同於您的self.emitPoint。問題是,clickedOnMap函數永遠不會被調用,不管怎麼樣,我不會收到任何錯誤。 – Farhan

+0

你能告訴我一些代碼嗎?我懷疑你缺少一些參數。 – luca76

+0

我終於明白了。你是對的@ luca76。我搞亂了這些論點,這就是爲什麼這個函數沒有被調用,儘管我不知道它爲什麼沒有拋出任何錯誤。反正謝謝你的幫助:) – Farhan

相關問題