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

Posted

技术标签:

【中文标题】如何设置 PyQt5 QIntValidator 的顶部和底部?【英文标题】:How to set PyQt5 QIntValidator's top and bottom? 【发布时间】:2016-06-19 15:21:25 【问题描述】:

我有一个行编辑,如下面的代码。在 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 的顶部吗?

【问题讨论】:

“它不起作用”是什么意思?请描述您看到的确切错误。 通过“它不起作用”我的意思是我不能输入大于 999999999 的数字,但我需要输入 9999999999(多一个数字)! 【参考方案1】:

QIntValidator 类仅支持-21474836482147483647 范围内的有符号值。如果您需要超出此范围的值,请使用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)

【讨论】:

以上是关于如何设置 PyQt5 QIntValidator 的顶部和底部?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PyQt5 设置枚举 AllowTabbedDocks

如何使用 PyQt5 设置窗口图标?

Pyqt5如何设置URL并显示页面

如何在 PyQt5 中横向打印?

如何正确设置在 PyQt5 上缩放的 Pixmap?

如何设置 PyQt5 Qtimer 在指定的时间间隔内更新?