Hi, all. Been a bit confused recently by the behavior of QAbstractSpinBox.fixup(). I have a class that derives from QSpinBox with the goal of ensuring that the user only enters integers whose last two digits form a number between 0 and 31, inclusive. For example, 19900 is valid, as is 19931; but 19932 through 19999 are invalid.
Because I don't know when the user enters '550' (which would be invalid by itself) whether he might be on the way to entering '5501' (valid), my validate() function returns QValidator.Intermediate for any integral input. I thought I could do 'final' validation by overriding fixup(), but I keep seeing the following error in the console: TypeError: invalid result type from IdSpinBox.fixup() This error only goes away if I stop trying to return a value from fixup(), but... if that's the correct signature, how should I fix the input? Relevant code appended below. I'm using PyQt-x11-gpl-4.7 with Python-2.6.4 and Qt-4.6.2. Thanks, Dave ['free' function] def normalize_id(id): """Return the ID with all but the last two digits stripped""" if not isinstance(id, str): id = str(id) return int(re.sub(".*([0-9]{2})", "\\1", id)); ... [IdSpinBox functions] ... def fixup(self, input): norm_id = normalize_id(input) if 0 <= norm_id <= 31: # Okay return input return QString(self.fallback_value) def validate(self, input, pos): if not input: return (QValidator.Intermediate, pos) try: int(input) return (QValidator.Intermediate, pos) except ValueError: return (QValidator.Invalid, pos) _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt