2016-09-07 8 views
0

Python 2.7.3でPyQt 4.9.1、Qt 4.8.1で書かれたQGISプラグインがあります。このプラグインを実行すると、すべての機能が正常に動作します。しかし、ウィンドウを閉じてもう一度やり直すと、すべての機能が2回発生します。その後、もう一度クローズ/オープンして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から再び開始します。

私はビューの作成者が失われた(プラグインはテーブルビューアです)が、ウィンドウを閉じて開いて、セルを消去せずにそこに再び置くことができないことを言及する必要があります。

+1

あなたはたぶん 'run'を呼び出すたびに' connect'するでしょう。修正することができます。 'Qt.UniqueConnection'を' self.dlg.pushButton_2.clicked.connect(self.openFile、Qt.UniqueConnection) 'のように' connect'に渡すことでこれを修正できます。これはむしろデザインが悪いようで、信号とスロットをどこか別の場所に接続する必要がありますが、提供したコードを手助けすることはできません。 – tobilocker

+0

self.availableLayersは毎回呼び出されますが、それはすべきですが、残りの関数はpushButtonsを押すときにのみ実行されると思いましたか? clicked.connectの動作はどうですか? – adamczi

+0

@adamczi。さて、あなたはすでに、それがどのように機能するのかではないことをあなた自身で確認したようです。 'connect'を呼び出すたびに、別の接続が追加されます。明らかに、 'run'メソッドではなく、ダイアログの設定メソッドで接続を一度*行う必要があります。 – ekhumoro

答えて

0

connectに電話するたびに、同じスロットに接続されていても、別の接続が追加されます。したがって、接続をrun()メソッドから移動してダイアログの設定メソッドに入れる必要があります。そのため、それらは一度しか作成されません。

+0

ありがとう!私は 'connect'を誤解していたに違いない。 – adamczi

関連する問題