我将我的PyQt代码与我的PostgreSQL相关联,而在PostgreSQL中,我认为某些列是NUMERIC(11,0)类型,但现在我想将它限制为11位数字,因为NUMERIC(11,0)表示最多11位数。
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位数。我把它覆盖了最大尺寸和数字类型,但现在我想将它限制为精确的位数。
谢谢!
答案 0 :(得分: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 :(得分: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_())