2016-08-02 17 views
0

私はPyQt4が新しく、いくつかの検索を行った後、私のGUIに表示されている問題に関する情報は見つかりませんでした。PyQt4ボタンをクリックして複数回クリック登録する

ユーザーがgetSingleItemsボタンをクリックすると、その関数は、ユーザーがgetAllItemsをクリックしたのと同じ時間実行されるという問題があります。たとえば、ユーザーがgetAllItemsをクリックして項目フィールドに値を入力した後、getSingleItemをクリックすると、getitemsが1回実行され、期待どおりに1回出力されます。しかし、ユーザーがリストから別の項目を選択してgetAllItemsを再度クリックすると、getSingleItemでgetitemが2回実行され結果が2倍になるという結果になります。 getAllItems 4xをクリックすると、選択項目を変更しなくてもgetItemをクリックすると、getSingleItemを1回クリックするだけで4xが実行されます。それをリフレッシュするための唯一の方法は、GUIを閉じてもう一度開くことです。どんな助けもありがとうございます。

class UpdateItem(QDialog, updateitem_ui.Ui_updateitem): 
    def __init__(self): 
     QDialog.__init__(self) 
     self.setupUi(self) 

     tests = ['Test1', 'Test2', 'Test3'] 

     self.list.addItems(tests) 
     self.exit.clicked.connect(self.close) 

     self.setFocus() 

     self.getAllItems.clicked.connect(self.getitems) 

    def getitems(self): 
     self.items.clear() 

     self.items.addItems(self.list.currentText()) 

     self.getSingleItem.clicked.connect(self.getitem) 

    def getitem(self): 
     self.item_id = self.items.currentText() 
     print(self.item_id) 

app = QApplication(sys.argv) 
gui = UpdateItem() 
gui.show() 
app.exec_() 
+0

あなたの 'getitems()'メソッドは、クリックして接続します。それは '__init__'にあるべきではありませんか? – NuclearPeon

+0

あなたは正しいです。その単純な変更はそれを修正した。残りの接続を__init___に移動する必要があります。ありがとう! – Mauricio

答えて

1

どうやらそうclicked信号はあなたが守る行動を起こし同じスロット、 に複数回接続されます 、getitemsの各実行でgetSingleItem.clickedへの新しい接続を追加しています。

__init__getitemsからライン

self.getSingleItem.clicked.connect(self.getitem) 

を移動しても問題が解決しなければならない、私は推測します。

+0

ありがとうございました!それは美しく働いた。私の人生のためにできなかった簡単な変化が見つかります。再度、感謝します! – Mauricio

関連する問題