[PyQt] QValidator fixup issue
Kerri Reno
kreno at yumaed.org
Thu Dec 3 16:40:33 GMT 2015
Got a response to this on stackoverflow - thanks!
http://stackoverflow.com/questions/34055174/qvalidator-fixup-issue
On Wed, Dec 2, 2015 at 4:27 PM, Kerri Reno <kreno at yumaed.org> wrote:
> 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!
> Kerri
>
> CODE:
>
> #!/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,
> pos)
>
> if valid != QtGui.QValidator.Acceptable:
> self.fixup(text)
> print 'acWidget.validate result of fixup', text
>
> # move position to the end, if fixup just added a
> dash
> # 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
> self.regExp().exactMatch(text):
> if DEBUG:
> print 'adding dash'
> text += '-'
> return
>
> newreg += '-'
>
> def isValid(self):
> '''return a true or false for the validity based on
> whether the
> widget is a lineEdit or a comboBox (acCB). true only if
> the
> validator returns QtGui.QValidator.Acceptable
> '''
> valid, _npos = QtGui.QRegExpValidator.validate(self,
> self.widget.text(),
>
> self.widget.cursorPosition())
> 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}'
> self.setMinimumWidth(200)
> self.setValidator(acValidator(QtCore.QRegExp(self.regex),
> self))
>
> if __name__ == '__main__':
>
> app = QtGui.QApplication(sys.argv)
> form = QtGui.QDialog()
> layout = QtGui.QVBoxLayout(form)
> a = acWidget(form)
> layout.addWidget(a)
> form.setLayout(layout)
> form.setMinimumWidth(400)
> form.setMinimumHeight(200)
> form.show()
> app.exec_()
>
>
>
> --
> .·:*¨¨*:·. .·:*¨¨*:·. .·:*¨¨*:·.
> 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!
>
--
Please send problems and questions to compass at yumaed.org
<cases at yuhsd.fogbugz.com>
If you have an emergency, and can't reach me, please call the help desk at
928-502-4202.
.·:*¨¨*:·. .·:*¨¨*:·. .·:*¨¨*:·.
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/20151203/732dcc4e/attachment.html>
More information about the PyQt
mailing list