Обработка сигналов PyQt 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_())

person Gautham Pughazhendhi    schedule 25.09.2016    source источник
comment
Похоже, вы могли подключать сигнал несколько раз. Покажите полный код, в котором вы устанавливаете соединение.   -  person ekhumoro    schedule 25.09.2016
comment
Я добавил свой код ниже   -  person Gautham Pughazhendhi    schedule 26.09.2016


Ответы (1)


Посмотрев на свой код, вы установили соединение несколько раз. Вы должны установить его с помощью self.pushButton.clicked.connect(self.repeat) только в своей __init__, но не в repeat() функции. Другими словами, удалите второе вхождение (т.е. в repeat()), и все будет в порядке. Соединение должно быть установлено только один раз, потому что однажды оно будет установлено, пока оно не будет вызвано disconnect() или пока slot или signal не будут уничтожены.

person V.K.    schedule 26.09.2016