[PyKDE] QValidator.fixup() and PyQt
Phil Thompson
phil at river-bank.demon.co.uk
Mon Feb 24 23:10:00 GMT 2003
On Monday 24 February 2003 8:33 pm, Jonathan Gardner wrote:
> I am trying to implement my own QValidator so that I can do cool things
> like enter money, phone numbers, etc...
>
> Anyway, I would like to be able to modify the QString passed into fixup().
> However, the code below (obviously) doesn't work.
>
> # Begin code
> import sys
> from qt import *
>
> class validator(QValidator):
>
> def __init__(self, parent=None, name=None):
> QValidator.__init__(self, parent, name)
>
> def validate(self, input, pos):
> return (QValidator.Intermediate, pos)
>
> def fixup(self, input):
> # How to do an in-place modification of input?
> input = QString("no!")
>
> class test_validator(QWidget):
>
> def __init__(self, parent=None, name=None, fl=0):
> QWidget.__init__(self, parent, name, fl)
>
> lo = QVBoxLayout(self, 11, 6)
>
> self.le = QLineEdit(self)
> self.le.setValidator(validator(self.le))
>
> lo.addWidget(self.le)
>
> if __name__ == "__main__":
> app = QApplication(sys.argv)
> args = app.argv()
> QObject.connect(app,SIGNAL("lastWindowClosed()"),app,SLOT("quit()"))
> w = test_validator()
> app.setMainWidget(w)
> w.show()
> app.exec_loop()
> # End code
>
> This method above doesn't work. I need a way to modify 'input' so that
> fixup can actually do something.
>
> Any ideas?
>
> Or should I be returning the the value like it does for other functions
> that accept a C++ '&' parameter? (And since PyQt doesn't handle this... is
> it a bug?)
Your code is replacing the string with a new one rather than trying to modify
the one passed in. For example the following will convert the input to upper
case...
def fixup(self, input):
input.replace(0,100,input.upper())
I admit that this isn't particularly intuitive - one of those things that I
might do a different way if I was starting again.
Phil
More information about the PyQt
mailing list