PyQt QPushButton信号处理

时间:2016-09-25 18:21:33

标签: python pyqt4 signals-slots qpushbutton

我有一个repeat python函数和一个只有一个按钮的 test.ui 。我怀疑的是如何在每次单击按钮时完全循环相同的功能一次。因为每当我表演时对我来说都是:

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 个答案:

答案 0 :(得分:2)

在您的代码中,您已多次建立连接。您应该仅在self.pushButton.clicked.connect(self.repeat)但不在__init__函数中使用repeat()建立它。换句话说,删除第二次出现(即在repeat()),你应该没事。连接应该只建立一次,因为一旦建立它就会持续到disconnect()被调用,或直到slotsignal被销毁。