我有一個用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)
如果我通過點擊「插件生成器」按鈕重新加載插件,它從一個重新開始。
我還應該提到我不想失去用戶創建的視圖(該插件是一個表格查看器),而是能夠關閉窗口,打開它並在沒有單元被清除的情況下重新打開它。
你可能'連接'每次你打電話'運行'。你可以修復。你可以通過像''self.dlg.pushButton_2.clicked.connect(self.openFile,Qt.UniqueConnection)'''''''傳遞''connect'來解決這個問題。這似乎是一個相當糟糕的設計,你可能應該將你的信號和插槽連接到其他地方,但不能幫助你提供的代碼。 – tobilocker
self.availableLayers每次都被調用,它應該,但我認爲剩下的函數只有在按下pushButton時才被執行?是不是clicked.connect如何工作? – adamczi
@adamczi。那麼,你似乎已經證實了自己,那是*不*它是如何工作的。每次你調用connect時,它都會添加另一個連接 - 這很簡單。顯然,您需要在對話框的設置方法中進行一次連接*,而不是在「運行」方法中。 – ekhumoro