[PyQt] Fwd: QValidator fixup issue

Kerri Reno kreno at yumaed.org
Wed Dec 2 23:27:40 GMT 2015

Good afternoon,

Following is my code to validate an account code, and add dashes at certain
intervals.  An example account code is 140-100-1000-6610-543.    The code
takes the regex: \d{3}-\d{3}-\d{4}-\d{4}-\d{3] and allows the user to type
in numbers, and where there is a dash in the regex, it places the dash for
the user.  Or rather, it should.  On our production server (('Qt version:',
'4.8.1'), ('SIP version:', '4.13.2'), ('PyQt version:', '4.9.1')) it does
work. Our dev server is upgraded to ('Qt version:', '4.8.6'),  ('SIP
version:', '4.15.5'), ('PyQt version:', '4.10.4') and it doesn't work there.

On each server, I type in 140.  On the production (older version), the line
edit value changes to 140-.  On the newer version development server, it
does not add the dash.

Please let me know if you see my issue, and let me know if this is a PyQT
issue, or a QT issue.

Thanks in advance!


#!/usr/bin/env python
# vim:set ts=4:set ff=unix
import sys
from PyQt4 import QtGui, QtCore

DEBUG = True

class acValidator(QtGui.QRegExpValidator):

        def __init__(self, regexp, widget):
                QtGui.QRegExpValidator.__init__(self, regexp, widget)
                self.widget = widget

        def validate(self, text, pos):
                '''function to decide if this account code is valid'''
                valid, _npos = QtGui.QRegExpValidator.validate(self, text,

                if valid != QtGui.QValidator.Acceptable:
                        print 'acWidget.validate result of fixup', text

                        # move position to the end, if fixup just added a
                        # to the end
                        newstr = self.widget.text()
                        newpos = len(str(newstr))
                        if pos + 1 == newpos and newstr[pos:newpos] == '-':
                                pos = newpos

                # return the valid variable, and the current position
                return (valid, pos)

        def fixup(self, text):
                '''place dashes, if we can'''
                # pylint: disable=no-member
                if DEBUG:
                        print 'acWidget.py fixup'
                reParts = self.regExp().pattern().split('-')
                if DEBUG:
                        print list(reParts)
                newreg = ''
                for i in range(len(reParts)):
                        newreg += reParts[i]
                        if DEBUG:
                                print i, reParts[i]

                        nr = QtCore.QRegExp(newreg)
                        # pylint: disable=no-member
                        if nr.exactMatch(text) and not
                                if DEBUG:
                                        print 'adding dash'
                                text += '-'

                        newreg += '-'

        def isValid(self):
                '''return a true or false for the validity based on whether
                widget is a lineEdit or a comboBox (acCB).  true only if the
                validator returns QtGui.QValidator.Acceptable
                valid, _npos = QtGui.QRegExpValidator.validate(self,

                if valid == QtGui.QValidator.Acceptable:
                        return True

                return False

class acWidget(QtGui.QLineEdit):

        def __init__(self, parent=None):
                QtGui.QLineEdit.__init__(self, parent)

                self.regex = r'\d{3}-\d{3}-\d{4}-\d{4}-\d{3}'

if __name__ == '__main__':

        app = QtGui.QApplication(sys.argv)
        form = QtGui.QDialog()
        layout = QtGui.QVBoxLayout(form)
        a = acWidget(form)

.·:*¨¨*:·.   .·:*¨¨*:·.   .·:*¨¨*:·.
Yuma Educational Computer Consortium
Compass Development Team
Kerri Reno
kreno at yumaed.org      (928) 502-4240
.·:*¨¨*:·.   .·:*¨¨*:·.   .·:*¨¨*:·.
I'm so busy I don't know if I found a rope or lost a horse!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20151202/ba32cfd6/attachment.html>

More information about the PyQt mailing list