2016-09-07 60 views
0

我有一個用PyQt 4.9.1,Qt 4.8.1編寫的Python 2.7.3的QGIS插件。當我運行這個插件時,每個函數都可以正常工作。但是,當我關閉窗口並重新打開它時,每個功能都會發生兩次。然後我再次關閉/打開,並且打開3次,等等等等。通過重新打開插件,函數被調用的次數越來越多

我應該在哪裏查找錯誤?我def run(self)部分看起來就像這樣:

def run(self): 

    self.dlg.show() 

    self.availableLayers() 

    self.dlg.pushButton_2.clicked.connect(self.openFile) 

    self.dlg.pushButton.clicked.connect(self.groupBy) 

    self.dlg.toolButton_4.clicked.connect(self.toggleRightPanel) 

如果我通過點擊「插件生成器」按鈕重新加載插件,它從一個重新開始。

我還應該提到我不想失去用戶創建的視圖(該插件是一個表格查看器),而是能夠關閉窗口,打開它並在沒有單元被清除的情況下重新打開它。

+1

你可能'連接'每次你打電話'運行'。你可以修復。你可以通過像''self.dlg.pushButton_2.clicked.connect(self.openFile,Qt.UniqueConnection)'''''''傳遞''connect'來解決這個問題。這似乎是一個相當糟糕的設計,你可能應該將你的信號和插槽連接到其他地方,但不能幫助你提供的代碼。 – tobilocker

+0

self.availableLayers每次都被調用,它應該,但我認爲剩下的函數只有在按下pushButton時才被執行?是不是clicked.connect如何工作? – adamczi

+0

@adamczi。那麼,你似乎已經證實了自己,那是*不*它是如何工作的。每次你調用connect時,它都會添加另一個連接 - 這很簡單。顯然,您需要在對話框的設置方法中進行一次連接*,而不是在「運行」方法中。 – ekhumoro

回答

0

每當您撥打connect時,它都會添加另一個連接 - 即使它位於同一個插槽。因此,您需要將連接移出run()方法,並將它們置於對話框的設置方法中,以便它們僅進行一次。

+0

謝謝!我一定誤解了'connect'。 – adamczi