如何设置PyQt5 QIntValidator的顶部和底部?

时间:2016-06-19 15:21:25

标签: python python-3.x pyqt5

我有一个像下面的代码一样的行编辑。在3个不同的代码中,我有两个不同的问题:

self.rnr_id_num_le = QLineEdit()
self.rnr_id_num_le.setValidator(QIntValidator(9999999999, 0))

使用这个我可以输入0和1。

self.rnr_id_num_le = QLineEdit()
self.rnr_id_num_le.setValidator(QIntValidator(0, 9999999999))

使用此我只能输入0。

我需要它来获得这样的数字:5236147891(位数是重要的。如果我不在QIntValidator中输入任何数字,它就不会让我输入一个这么大的数字)

基于 http://pyqt.sourceforge.net/Docs/PyQt4/qintvalidator.html#QIntValidator-2 第二个必须工作;但它没有:(

编辑:

好吧,如果可能的话,显然它最顶部,比我需要的数字少一位数。您是否知道另一种验证我的QLineEdit或增加QIntValidator顶级的方法?

1 个答案:

答案 0 :(得分:1)

QIntValidator类仅支持-2147483647, 2147483647范围内的有符号值。如果您需要超出此范围的值,请使用QDoubleValidator,它支持无限的浮点值。

您可以创建一个简单的QDoubleValidator子类来调整行为,使其更像QIntValidator

class BigIntValidator(QtGui.QDoubleValidator):
    def __init__(self, bottom=float('-inf'), top=float('inf')):
        super(BigIntValidator, self).__init__(bottom, top, 0)
        self.setNotation(QtGui.QDoubleValidator.StandardNotation)

    def validate(self, text, pos):
        if text.endswith('.'):
            return QtGui.QValidator.Invalid, text, pos
        return super(BigIntValidator, self).validate(text, pos)