我有如下代码这样的行编辑。在3个不同的代码中,我有2个不同的问题:
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排名的方法吗?
最佳答案
QIntValidator类仅支持在-2147483648
至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)