使用QValidator进行PyQt QLineEdit

时间:2014-03-14 14:30:44

标签: python qt qlineedit pyqt5

我的项目中有一个QLineEdit。 我想在lineEdit上使用QValidation。

#Create lineEdit
itemValue = QtWidgets.QLineEdit()
#Create валидатор
objValidator = QtGui.QDoubleValidator(self)
#setup range
objValidator.setRange(-10.0, 100.0, 5)
#lineEdit with validation
itemValue.setValidator(objValidator)

但它不能很好地工作。我可以输入我想要的东西,除了符号。 并且范围不起作用!我可以键入100500或-100500,但我想,用户只能在范围内输入数字。

我应该如何使用范围? 我需要帮助:))

感谢您的帮助,伙计们!

3 个答案:

答案 0 :(得分:4)

默认情况下,验证程序不会阻止输入范围之外的值,如果输入的值为Invalid or Intermediate,则不会阻止用户离开控件。

但是,如果安装了验证程序,则行编辑不会发出editingFinishedreturnPressed信号,其hasAcceptableInput方法将返回False,如果当前值不可接受。所以它确实让你有机会拒绝输入。此外,如果您对验证程序进行子类化,则可以重新实现其fixup方法来控制输入的值。

但是,正如已经建议的那样,QDoubleSpinBox可能是您当前用例的最佳解决方案。

答案 1 :(得分:3)

作为替代方案,您可以使用QDoubleSpinBox

  • 中有验证器构建
  • 在输入
  • 时阻止无效输入
  • 内置了setRange()
  • 并添加一个小句柄来更改更多面向鼠标的用户的值。

答案 2 :(得分:0)

可能你期待一些不应该发生的事情 通常,当您有验证器时,您应该能够在中间状态键入一些不完全符合限制的内容。但是当编辑失去焦点时,这应该是固定的。

为什么呢?想象一下,如果您要84,请将其更正为-8.4。许多人都会这样做:添加减去所以现在你有-84这是不可接受的,然后添加点。如果验证器立即修复了这个问题,那么对用户来说会很烦人。

所以,当编辑失去焦点时,底线是否会发生这个“问题”?