繁体   English   中英

带有 QValidator 的 PyQt QLineEdit

[英]PyQt QLineEdit with QValidator

我的项目中有一个 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,但我想要,该用户只能输入范围内的数字。

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

感谢您的帮助,伙计们!

默认情况下,验证器不会阻止输入范围之外的值,并且如果输入的值是Invalid 或 Intermediate ,它也不会阻止用户离开行编辑。

但是,它确实让您有机会以编程方式拒绝输入,因为只要当前值不可接受,行编辑就不会发出它的editFinishedreturnPressed信号,并且它的hasAcceptableInput方法将返回False 此外,如果您对验证器进行子类化,则可以重新实现其修复方法来控制输入的值。

然而,正如已经提出的那样,一个更好/更简单的解决方案是使用QDoubleSpinBox ,因为它会自动清理输入并提供更用户友好的界面。

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

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

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

为什么? 想象一下,您有84并且您希望将其更正为-8.4 很多人会这样做:加减号,所以现在你有-84 ,这是不可接受的,然后加点。 如果验证器立即修复此问题,那么用户会很烦。

那么当编辑器失去焦点时,这个“问题”是否会发生?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM