Найти - Пользователи
Полная версия: Ожидание и автоматический запуск функции после введения данных соответствующих маске
Начало » Центр помощи » Ожидание и автоматический запуск функции после введения данных соответствующих маске
1
q789
Приветствую всех.
Прошу помощи в написании функции которая ждет ввода данных в поле lineEdit (PyQt5) и как только введено 12 знаков запускается функция записи этих данных в базу. Затем поле lineEdit очищается и снова ждет ввода данных.
таким образом при заполнении базы пользователю ненужно будет нажимать кнопку ОК после каждого ввода.
Пишу на Python 3.6

Все на что у меня хватило мозгов (цикл while) вводит в ступор всю программу.
vic57
используйте сигналы QLineEdit.textChanged,
и в слоте делайте проверку QLineEdit.text().size()
или QLineEdit.returnPressed (это будет работать по нажатию Enter)
q789
Благодарю.
Не работает 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
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
вообще проверку данных лучше через валидатор делать
 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_()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB