q789
Окт. 13, 2018 08:56:05
Приветствую всех.
Прошу помощи в написании функции которая ждет ввода данных в поле lineEdit (PyQt5) и как только введено 12 знаков запускается функция записи этих данных в базу. Затем поле lineEdit очищается и снова ждет ввода данных.
таким образом при заполнении базы пользователю ненужно будет нажимать кнопку ОК после каждого ввода.
Пишу на Python 3.6
Все на что у меня хватило мозгов (цикл while) вводит в ступор всю программу.
vic57
Окт. 13, 2018 09:29:00
используйте сигналы QLineEdit.textChanged,
и в слоте делайте проверку QLineEdit.text().size()
или QLineEdit.returnPressed (это будет работать по нажатию Enter)
q789
Окт. 13, 2018 11:22:39
Благодарю.
Не работает 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
vic57
Окт. 15, 2018 21:49:55
q789
Не работает self.ui.lineEdit.text().size()
все верно, в PyQt5 надо так
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 22:41:40
вообще проверку данных лучше через валидатор делать
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_()