2016-09-25 118 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被销毁。