2016-08-02 116 views
0

我是PyQt4的新手,經過多次搜索後,我還沒有找到有關我在GUI中看到的問題的信息。PyQt4按鈕點擊註冊多次

問題是,當用戶單擊getSingleItems按鈕時,該函數運行的次數與用戶單擊getAllItems的次數相同。例如,如果用戶單擊getAllItems來填充項目字段,然後他們單擊getSingleItem,則getitems將運行一次,並且他們將根據期望打印一次結果。但是,如果用戶從列表中選擇另一項並再次單擊getAllItems,則在getSingleItem上,結果是getitem將運行2x,因此會打印2x。這會隨着每次運行而增加,因此單擊getAllItems 4x即使不更改選擇,然後單擊getitem將只需單擊getSingleItem即可運行4次。只有刷新它的方法是關閉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

顯然你要添加在getitems每次運行getSingleItem.clicked新的連接, 所以clicked信號被連接多次到同一插槽, 這會導致你觀察到的行爲。

移動線

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

getitems__init__應該可以解決這個問題,我猜。

+0

謝謝!這工作很好。簡單的變化,我不能爲我的生活找到。再次感謝! – Mauricio