PyQt:QValidator函数定义

2024-10-01 15:41:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在使用一个相当残酷的方法来获得什么样的QValidator将轻松交付。在这个小部件上定位一个简单的信息是相当困难的。下面的代码是从另一篇文章中复制/粘贴的(经过一些小的编辑)。它创建一个对话框,其中单线编辑连接到ValidStringLength QValidator,强制将字符串大小设置为0<;length<;5。我想知道字符串清理“可执行”函数应该放在哪里:在fixup()方法中?请解释QValidator()背后的逻辑。在


   from PyQt4 import QtCore, QtGui
    class ValidStringLength(QtGui.QValidator):
        def __init__(self, min, max, parent):
            QtGui.QValidator.__init__(self, parent)

            self.min = min
            self.max = max

        def validate(self, s, pos):
            print 'validate(): ', type(s), type(pos), s, pos

            if self.max > -1 and len(s) > self.max:
                return (QtGui.QValidator.Invalid, pos)

            if self.min > -1 and len(s) < self.min:
                return (QtGui.QValidator.Intermediate, pos)

            return (QtGui.QValidator.Acceptable, pos)

        def fixup(self, s):
            pass


    class Window(QtGui.QWidget):
        def __init__(self):
            QtGui.QWidget.__init__(self)

            self.editLine = QtGui.QLineEdit(self)
            self.validator = ValidStringLength(0,5,self)

            self.editLine.setValidator(self.validator)

            layout = QtGui.QVBoxLayout(self)
            layout.addWidget(self.editLine)

    if __name__ == '__main__':

        import sys
        app = QtGui.QApplication(sys.argv)
        window = Window()
        window.setGeometry(500, 300, 500, 100)
        window.show()
        sys.exit(app.exec_())

Tags: 方法posselfreturnifinitdefsys
1条回答
网友
1楼 · 发布于 2024-10-01 15:41:21

根据Qt文档:

fixup()是为可以修复某些用户错误的验证器提供的。默认实现什么也不做。例如,如果用户按Enter键(或Return键)并且内容当前无效,QLineEdit将调用fixup()。这使fixup()函数有机会执行一些魔术,使无效字符串可以接受。

http://qt-project.org/doc/qt-4.8/qvalidator.html

所以,是的,如果您的“字符串清理”是为了更正用户的输入,fixup应该是正确的位置。在

编辑:

前四个字符应大写:

def validate(self, s, pos):
    print 'validate(): ', type(s), type(pos), s, pos

    n = min(4,s.count())
    if s.left(n).compare(s.left(n).toUpper()):
        return (QtGui.QValidator.Intermediate, pos)
    else:
        return (QtGui.QValidator.Acceptable, pos)

def fixup(self, s):
    n = min(4, s.count())
    s.replace(0, n, s.left(n).toUpper())

相关问题 更多 >

    热门问题