2014-09-05 2 views
1

Я связываю свой код PyQt с моим PostgreSQL, а внутри PostgreSQL я полагаю, что некоторые столбцы имеют тип NUMERIC (11,0), но теперь я ' d хотел бы ограничить его точностью до 11 цифр, поскольку NUMERIC (11,0) означает максимум 11 цифр.PyQt, как проверить, имеет ли массив чисел определенную длину

class kirurg_GUI(QtGui.QWidget, Ui_kirurg_Widget): 
     def __init__(self): 
       QtGui.QWidget.__init__(self) 
       self.setupUi(self) 
       self.kirurg_Add_button.clicked.connect(self.insert_kirurg) 

     def insert_kirurg(self): 
       oib_kir = self.kirurg_oib_kir_lineEdit.text() 
       if not oib_kir: 
        QtGui.QMessageBox.critical(self, 'Query error', 'oib_kir must not be empty') 

       else: 
        query = QSqlQuery() 
        status = query.exec("INSERT INTO kirurg (oib_kir, prezime, ime, adresa, broj_telefona)" 
             "VALUES ('%s', '%s', '%s', '%s', '%s')" % (''.join(self.kirurg_oib_kir_lineEdit.text()), 
                        ''.join(self.kirurg_prezime_lineEdit.text()), 
                        ''.join(self.kirurg_ime_lineEdit.text()), 
                        ''.join(self.kirurg_adresa_lineEdit.text()), 
                        ''.join(self.kirurg_broj_telefona_lineEdit.text()))) 
        if status is not True: 
          errorText = query.lastError().text() 
          QtGui.QMessageBox.critical(self, 'Query error', errorText) 

        else: 
          msgBox = QtGui.QMessageBox() 
          msgBox.setWindowTitle("Kirurg") 
          msgBox.setText("Data entered successfully") 
          msgBox.exec_() 
          kirurg.close() 

Вот часть моего кода, где я добавляю значения внутри своей БД.

Эта линия:

''.join(self.kirurg_oib_kir_lineEdit.text() 

должны быть длиной ровно 11 цифр. Я получил его для максимального размера и числового типа, но теперь я хотел бы ограничить его точным числом цифр.

Спасибо!

ответ

2

Ваш номер может быть использован только QLineEdit.setInputMask (self, QString inputMask). Прочитайте here, чтобы настроить их.

class kirurg_GUI (QtGui.QWidget, Ui_kirurg_Widget): 
    def __init__ (self): 
     QtGui.QWidget.__init__(self) 
     self.setupUi(self) 
     self.kirurg_Add_button.clicked.connect(self.insert_kirurg) 
     maxLength = 11              # <- Add length 
     self.kirurg_oib_kir_lineEdit.setInputMask(('9' * maxLength) + ';_') # <- Set input mask 
     self.kirurg_oib_kir_lineEdit.setMaxLength(maxLength)    # <- Set max length 

    def insert_kirurg (self): 
     oib_kir = self.kirurg_oib_kir_lineEdit.text() 
     if not oib_kir: 
      QtGui.QMessageBox.critical(self, 'Query error', 'oib_kir must not be empty') 
     if len(str(oib_kir)) != self.kirurg_oib_kir_lineEdit.maxLength():     # Check digit length 
      QtGui.QMessageBox.critical(self, 'Query error', 'oib_kir must not be 11 diget') # Not 11 digit ? Error! 
     else: 
      query = QSqlQuery() 
      status = query.exec("INSERT INTO kirurg (oib_kir, prezime, ime, adresa, broj_telefona)" 
           "VALUES ('%s', '%s', '%s', '%s', '%s')" % (''.join(self.kirurg_oib_kir_lineEdit.text()), 
                      ''.join(self.kirurg_prezime_lineEdit.text()), 
                      ''.join(self.kirurg_ime_lineEdit.text()), 
                      ''.join(self.kirurg_adresa_lineEdit.text()), 
                      ''.join(self.kirurg_broj_telefona_lineEdit.text()))) 
      if status is not True: 
       errorText = query.lastError().text() 
       QtGui.QMessageBox.critical(self, 'Query error', errorText) 
      else: 
       msgBox = QtGui.QMessageBox() 
       msgBox.setWindowTitle("Kirurg") 
       msgBox.setText("Data entered successfully") 
       msgBox.exec_() 
       kirurg.close() 
+1

Спасибо, он работает! – Luka

1

Нельзя использовать свойство maxLength?

self.kirurg_oib_kir_lineEdit.setMaxLength(11); 

Или вы можете попробовать добавить фильтр событий следующим образом. Возможно, я ошибаюсь

class Filter(QtCore.QObject): 
    def eventFilter(self, widget, event): 
     if event.type() == QtCore.QEvent.FocusOut: 
      getTxt = widget.text() 
      if len(getTxt) < 11 or len(getTxt) > 11: 
       reply = QtGui.QMessageBox.critical(None, "Critical", 
        'Value must be 11 numbers', QtGui.QMessageBox.Ok) 
      return False 
     else: 
      return False 

class LimitTest(QtGui.QWidget): 
    def __init__(self, parent=None, total=20): 
     super(LimitTest, self).__init__(parent) 
     self._filter = Filter() 
     self.newLimitTextEdit = QtGui.QLineEdit() 
     self.normal = QtGui.QLineEdit() 
     main_layout = QtGui.QGridLayout() 
     main_layout.addWidget(self.newLimitTextEdit, 0, 0) 
     main_layout.addWidget(self.normal, 0, 1) 
     self.setLayout(main_layout) 
     self.setWindowTitle('Test') 
     self._active = False 
     self.newLimitTextEdit.installEventFilter(self._filter) 


app = QtGui.QApplication(sys.argv) 
bar = LimitTest(total=101) 
bar.show() 
sys.exit(app.exec_()) 
+0

Не было бы это просто ограничить максимальную длину? У меня уже есть работа. Мне нужно, чтобы это было ровно 11, а не 9, а не 10, но 11. – Luka

+0

Возможно, обновление с фильтром событий поможет вам. – Achayan

Смежные вопросы