2016-09-25 162 views
0

我有一個repeat Python函數和一個test.ui它只有一個按鈕。我的疑問是,如果每次單擊按鈕時如何精確地循環一次相同的功能。因爲對我來說,只要我執行:PyQt QPushButton信號處理

self.pushButton.clicked.connect(self.repeat) 

它循環多次進入函數而不是一次。每當我們到達函數時,我都會通過增加一個值來找到它。每次點擊按鈕時如何到達功能repeat

import sys 
from PyQt4 import QtCore, QtGui, uic 

qtCreatorFile = "test.ui" 

Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile) 


class Login(QtGui.QMainWindow, Ui_MainWindow): 
    i=1 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 
     Ui_MainWindow.__init__(self) 

     self.setupUi(self) 
     self.pushButton.setText("iam in init") 
     self.pushButton.clicked.connect(self.repeat) 
    def repeat(self): 

     self.pushButton.setText("iam in repeat"+str(self.i)) 

     self.i=self.i+1 

     self.pushButton.clicked.connect(self.repeat) 




if __name__ == "__main__": 
    app=QtGui.QApplication(sys.argv) 
    main = Login() 
    main.show() 
    sys.exit(app.exec_()) 
+1

這聽起來像你可能已經連接了多次信號。在完成連接的地方顯示完整的代碼。 – ekhumoro

+0

我在下面包含了我的代碼 – Gautham

回答

1

在你的代碼中掛鉤,你建立了多次連接。您只能在__init__中使用self.pushButton.clicked.connect(self.repeat),而不能在repeat()功能中使用self.pushButton.clicked.connect(self.repeat)。換句話說,刪除第二次出現(即在repeat()),你應該沒問題。連接應該只建立一次,因爲一旦建立連接,直到調用disconnect()或直到slotsignal被銷燬。