带有QValidator的PyQt QLineEdit

3 投票
3 回答
8200 浏览
提问于 2025-04-17 22:19

我在我的项目里有一个QLineEdit(就是一个可以输入文本的框)。

我想在这个输入框上使用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

你可能期待的事情其实是不应该发生的。
一般来说,当你有一个验证器时,你应该能够在输入过程中输入一些不完全符合规定的内容。但是,当编辑框失去焦点时,这些内容应该被修正。

为什么呢?想象一下,你有一个数字 84,你想把它改成 -8.4。很多人会这样做:先加上负号,这样就变成了 -84,这其实是不被允许的,然后再加上小数点。如果验证器立刻就修正这个错误,那对用户来说会很烦人。

所以,简单来说,这个“问题”是在编辑框失去焦点时才会发生吗?

3

你可以选择使用一个叫做 QDoubleSpinBox 的控件。

  • 它自带输入验证功能。
  • 在输入时可以防止无效的内容。
  • 它有一个内置的设置范围的功能。
  • 而且还增加了一个小把手,方便喜欢用鼠标的用户调整数值。
5

默认情况下,验证器不会阻止用户输入超出范围的值,也不会阻止用户在输入的值是无效或中间状态时离开输入框。

不过,你可以通过编程的方式来拒绝这些输入,因为只要当前的值不合适,输入框就不会发出编辑完成回车按下的信号,并且它的hasAcceptableInput方法会返回False。另外,如果你创建一个验证器的子类,你可以重新实现它的fixup方法来控制输入的值。

不过,正如之前提到的,使用QDoubleSpinBox会是一个更好、更简单的解决方案,因为它可以自动清理输入,并提供更友好的用户界面。

撰写回答