【问题标题】:PyQt QLineEdit with QValidatorPyQt QLineEdit 与 QValidator
【发布时间】:2014-04-19 21:56:51
【问题描述】:

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

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

谢谢你们的帮助,伙计们!

【问题讨论】:

    标签: python qt qlineedit pyqt5


    【解决方案1】:

    您也可以使用QDoubleSpinBox

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 是的,当编辑器失去焦点时会出现这个问题。我正在输入 250,然后在编辑器中单击,不在 lineEdit 中单击,但没有任何反应
      • 这很奇怪,它应该可以工作。我认为您的代码没有任何问题。
      • 你能告诉我更多关于那件事的信息吗:我们输入 100500,没关系,但你认为如果我们点击窗口的另一部分或失去焦点,验证将起作用,但如何?我们已经输入了数字!我无法理解它是如何修复的..
      【解决方案3】:

      默认情况下,验证器不会阻止输入超出范围的值,如果输入的值为Invalid or Intermediate,它也不会阻止用户离开行编辑。

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

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

      【讨论】:

        猜你喜欢
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        • 2014-02-07
        • 2017-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多