Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » Ожидание и автоматический запуск функции после введения данных соответствующих маске [RSS Feed]

#1 Окт. 13, 2018 08:56:05

q789
Зарегистрирован: 2018-10-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Ожидание и автоматический запуск функции после введения данных соответствующих маске

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

Все на что у меня хватило мозгов (цикл while) вводит в ступор всю программу.

Офлайн

#2 Окт. 13, 2018 09:29:00

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Ожидание и автоматический запуск функции после введения данных соответствующих маске

используйте сигналы QLineEdit.textChanged,
и в слоте делайте проверку QLineEdit.text().size()
или QLineEdit.returnPressed (это будет работать по нажатию Enter)

Отредактировано vic57 (Окт. 13, 2018 09:29:38)

Офлайн

#3 Окт. 13, 2018 11:22:39

q789
Зарегистрирован: 2018-10-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Ожидание и автоматический запуск функции после введения данных соответствующих маске

Благодарю.
Не работает 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)

Офлайн

#4 Окт. 15, 2018 21:49:55

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Ожидание и автоматический запуск функции после введения данных соответствующих маске

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 21:50:21)

Офлайн

#5 Окт. 15, 2018 22:41:40

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

Ожидание и автоматический запуск функции после введения данных соответствующих маске

вообще проверку данных лучше через валидатор делать

 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_()

Офлайн

  • Начало
  • » Центр помощи
  • » Ожидание и автоматический запуск функции после введения данных соответствующих маске[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version