Форум сайта python.su
Приветствую всех.
Прошу помощи в написании функции которая ждет ввода данных в поле lineEdit (PyQt5) и как только введено 12 знаков запускается функция записи этих данных в базу. Затем поле lineEdit очищается и снова ждет ввода данных.
таким образом при заполнении базы пользователю ненужно будет нажимать кнопку ОК после каждого ввода.
Пишу на Python 3.6
Все на что у меня хватило мозгов (цикл while) вводит в ступор всю программу.
Офлайн
используйте сигналы QLineEdit.textChanged,
и в слоте делайте проверку QLineEdit.text().size()
или QLineEdit.returnPressed (это будет работать по нажатию Enter)
Отредактировано vic57 (Окт. 13, 2018 09:29:38)
Офлайн
Благодарю.
Не работает self.ui.lineEdit.text().size() сделал через self.ui.lineEdit.cursorPosition()
class form(QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
self.db.setDatabaseName('base.db')
self.model = QtSql.QSqlTableModel()
self.model.setTable('field')
self.model.setEditStrategy(QtSql.QSqlTableModel.OnFieldChange)
self.model.select()
self.model.setHeaderData(0, QtCore.Qt.Horizontal,“No”)
self.model.setHeaderData(1, QtCore.Qt.Horizontal,“Name”)
self.show()
self.ui.lineEdit.textChanged.connect(self.addToDb)
def addToDb(self):
if self.ui.lineEdit.cursorPosition() == 12:
self.model.setData(self.model.index(self.i,0),self.ui.lineEdit.text())
else:
pass
Отредактировано q789 (Окт. 13, 2018 11:25:09)
Офлайн
q789все верно, в PyQt5 надо так
Не работает self.ui.lineEdit.text().size()
from PyQt5 import Qt class W(Qt.QMainWindow): def __init__(self): super().__init__() self.line = Qt.QLineEdit() self.line.textChanged.connect(self.on_line) self.setCentralWidget(self.line) def on_line(self): n = len(self.line.text()) if n == 12: self.line.clear() if __name__=="__main__": app = Qt.QApplication([]) w = W() w.show() app.exec_()
Отредактировано vic57 (Окт. 15, 2018 21:50:21)
Офлайн
вообще проверку данных лучше через валидатор делать
from PyQt5 import Qt class W(Qt.QMainWindow): def __init__(self): super().__init__() self.line = Qt.QLineEdit() self.line.setValidator(Qt.QRegExpValidator(Qt.QRegExp("[A-Za-z0-9]{12}"))) self.line.textChanged.connect(self.on_line) self.setCentralWidget(self.line) self.statusBar().showMessage('Введите данные') def on_line(self): if self.line.hasAcceptableInput(): self.statusBar().showMessage('OK') if __name__=="__main__": app = Qt.QApplication([]) w = W() w.show() app.exec_()
Офлайн