Получение сигнала об изменении текста в текстбоксе

Кратко: есть множество текстбоксов, при изменении текста в которых должно выполняться какое-то действие.

Подробно: стоит задача сделать программу, настройки для которой вводятся в текстбоксы и сохраняются. "Из коробки" поля пустые, при последующих запусках программы настройки подгружаются из БД sqlite3. При заполнении (изменении текста) содержимое каждого текстбокса должно записываться либо сразу БД (лучше так) либо во временный словарь, который, после неактивности изменения текстбоксов, заносится в БД.

Интересует функция, проверяющая изменения текста во всех текстбоксах, прочие действия запилю сам. Способы "ввести данные и нажать кнопочку для сохранения" и "сделать сигнал на нажатие Enter после ввода текста в текстбокс" не интересуют, как это сделать я знаю.

Пример кода:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(129, 129)
        self.lineEdit = QtWidgets.QLineEdit(Dialog)
        self.lineEdit.setGeometry(QtCore.QRect(10, 10, 113, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_2.setGeometry(QtCore.QRect(10, 40, 113, 20))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.lineEdit_3 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_3.setGeometry(QtCore.QRect(10, 70, 113, 20))
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.lineEdit_4 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_4.setGeometry(QtCore.QRect(10, 100, 113, 20))
        self.lineEdit_4.setObjectName("lineEdit_4")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: S. Nick

QLineEdit::textChanged(const QString &text)

Этот сигнал испускается всякий раз, когда изменяется текст. Текстовый аргумент - это новый текст.

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(129, 129)
        self.lineEdit = QtWidgets.QLineEdit(Dialog)
        self.lineEdit.setGeometry(QtCore.QRect(10, 10, 113, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_2.setGeometry(QtCore.QRect(10, 40, 113, 20))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.lineEdit_3 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_3.setGeometry(QtCore.QRect(10, 70, 113, 20))
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.lineEdit_4 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_4.setGeometry(QtCore.QRect(10, 100, 113, 20))
        self.lineEdit_4.setObjectName("lineEdit_4")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))


class Dialog(QtWidgets.QDialog, Ui_Dialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setupUi(self)

        self.lineEdit.textChanged.connect(lambda text, obj=self.lineEdit: self.text_Changed(text, obj))
        self.lineEdit_2.textChanged.connect(lambda text, obj=self.lineEdit_2: self.text_Changed(text, obj))
        self.lineEdit_3.textChanged.connect(lambda text, obj=self.lineEdit_3: self.text_Changed(text, obj))
        self.lineEdit_4.textChanged.connect(lambda text, obj=self.lineEdit_4: self.text_Changed(text, obj))

    def text_Changed(self, text, obj):
        print(text, obj.objectName())


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Dialog()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка