Python 使用QValidator的PyQt QLineEdit

Python 使用QValidator的PyQt QLineEdit,python,qt,qlineedit,pyqt5,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.setV

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

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


谢谢你们的帮助,伙计们

作为替代,您可以使用

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

    • 作为替代,您可以使用

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

        • 也许你在期待一些不应该发生的事情。
          一般来说,当您有验证器时,您应该能够在中间状态中键入不完全满足限制的内容。但当编辑器失去焦点时,这应该是固定的

          为什么??假设您有一个
          84
          文件,您希望将其更正为
          -8.4
          。很多人会这样做:加负号,所以现在你有
          -84
          ,这是不可接受的,然后加点。若验证器立即修复这个问题,那个么对用户来说会很烦人


          所以,当编辑器失去焦点时,这个“问题”到底会发生吗?

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

          为什么??假设您有一个
          84
          文件,您希望将其更正为
          -8.4
          。很多人会这样做:加负号,所以现在你有
          -84
          ,这是不可接受的,然后加点。若验证器立即修复这个问题,那个么对用户来说会很烦人


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

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

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


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

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

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


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

          是的,当编辑器失去焦点时会发生此问题。我正在键入250,并在编辑器中单击not,在lineEdit中单击not,但没有发生任何事情这很奇怪,应该可以工作。我看不出你的代码有任何问题。你能告诉我更多关于这件事的信息吗:我们键入100500,这没关系,但你认为如果我们点击窗口的另一部分或松开焦点,验证会起作用,但是如何进行呢?我们已经输入了数字!我不明白它是如何修复的。是的,当编辑器失去焦点时,这个问题就会发生。我正在键入250,并在编辑器中单击not,在lineEdit中单击not,但没有发生任何事情这很奇怪,应该可以工作。我看不出你的代码有任何问题。你能告诉我更多关于这件事的信息吗:我们键入100500,这没关系,但你认为如果我们点击窗口的另一部分或松开焦点,验证会起作用,但是如何进行呢?我们已经输入了数字!我不明白它是怎么修好的。。