Получение сигнала об изменении текста в текстбоксе
Кратко: есть множество текстбоксов, при изменении текста в которых должно выполняться какое-то действие.
Подробно: стоит задача сделать программу, настройки для которой вводятся в текстбоксы и сохраняются. "Из коробки" поля пустые, при последующих запусках программы настройки подгружаются из БД 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 шт):
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_())
