Giving the User Unobtrusive Feedback During Data Entry with Qt
Credit: Alex Martelli
Problem
You want to validate the contents of a line-entry widget on the fly while the user is entering data and give unobtrusive feedback about whether the current contents are valid, incomplete, or invalid.
Solution
Changing the widget’s background color to different shades is an excellent way to provide unobtrusive feedback during data entry. As usual, it’s best to package the solution as a reusable widget:
from qt import *
class ValidatingLineEdit(QLineEdit):
colors = Qt.red, Qt.yellow, Qt.green
def _ _init_ _(self, validate, parent=None, name=None):
QLineEdit._ _init_ _(self, parent, name)
self.validate = validate
self.connect(self, SIGNAL("textChanged(const QString &)"), self.changed)
self.color = None
self.changed('')
def changed(self, newText):
colorIndex = self.validate(unicode(newText))
if colorIndex is None: return
color = self.colors[colorIndex].light(196)
if color != self.color:
self.setPaletteBackgroundColor(color)
self.color = colorThe function passed as the validate argument must
accept a Unicode string and return either None,
meaning no color change, or an index into the
widget’s colors attribute. By
default, 0 indicates red (an incorrect entry),
1 indicates yellow (an incomplete entry), and
2 indicates green (an entry that is already
acceptable).
Discussion
When the user is entering data in a line-entry field, it can be helpful to validate the field’s contents on the fly, at every change, ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access