使用PyQt5的QDoubleValidator的意外行为

时间:2018-03-31 18:31:12

标签: python pyqt qlineedit

我正在尝试在应用程序中使用QDoubleValidator来验证在QLineEdit小部件中输入的0.00到99.99范围内的浮点数。为此,我使用如下结构:

self.e2 = QLineEdit()
self.e2.setValidator(QDoubleValidator(0.00,99.99,2))
<mode code> 
self.e2.editingFinished.connect(self.__call_float)

我希望只要输入在0.0099.99这个范围内并且小数为2或更小,就会调用函数__call_float。

结果不同。表单接受带有一个或两个整数位的值:&#34; 1。&#34;,&#34; 22。&#34;,&#34; 22&#34;但不是具有2个整数位和2个十进制值的值作为&#34; 22.22&#34;,&#34; 33.33&#34;。还有其他值被接受为&#34; 1.2&#34;,&#34; 0.22&#34;。奇怪的一个特殊方面是,当我将最大小数位数修改为4时,行为不会改变:

   
self.e2.setValidator(QDoubleValidator(0.00,99.99,4))

我不认为这是预期的行为。

我附上一份完整的申请表作为参考:

   
import sys
from PyQt5 import QtCore, QtGui
from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QFormLayout, QMainWindow
from PyQt5.QtGui import QDoubleValidator

class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()

        self.win= QWidget()

        self.e2 = QLineEdit()
        self.e2.setValidator(QDoubleValidator(0.00,99.99,2))

        flo = QFormLayout()
        flo.addRow("Input float",self.e2)
        self.e2.editingFinished.connect(self.__call_float)

        self.win.setLayout(flo)
        self.win.setWindowTitle("PyQt")
        self.win.show()

        sys.exit(app.exec_())

    def __call_float(self):
        print(self.e2.text())



if __name__ == '__main__':
        app = QApplication(sys.argv)
        mainwindow = MainWindow() 

        mainwindow.show()

        sys.exit(app.exec_())

0 个答案:

没有答案