[pygtk] A "delayed changed" signal for text entries?
sandbox_mail
sandbox_mail at yahoo.de
Wed Sep 30 06:21:34 WST 2009
@Tim, this looks like a good solution, I'll try it out.
@Tobias, I did not quite get it. What do you mean by "do an idle_add"?
Thanks,
freddy
Tim Evans wrote:
> sandbox_mail wrote:
>> Hi folks,
>> in my GUI I have an entry where the user is supposed to enter an
>> expression according to a specific syntax.
>> If the user makes a mistake, the entry turn red.
>>
>> This works quite well but there is one usability flaw:
>> Right now I use the "changed" signal to invoke checking of the contents.
>> Therefore the entry turns red right after the first character has been
>> entered.
>>
>> Is there an elegant way (maybe another signal) to delay the checking?
>> Like in a wordprocessor I would like to change the color only after no
>> further typing was done for ~1 sec. or if the entry loses focus.
>>
>> Thanks for any hints!
>
> I have used code that looks roughly like this:
>
> class DelayedCall(object):
> def __init__(self, delay, callback):
> self._delay = delay
> self._callback = callback
> self._id = 0
>
> def call(self):
> if self._id != 0:
> gobject.source_remove(self._id)
> self._id = gobject.timeout_add(self._delay, self._timeout)
>
> def _timeout(self):
> self._id = 0
> self._callback()
> return False
>
> Call 'call()' whenever the entry changes. Your callback will be called
> when nothing has happened in the last 'delay' milliseconds. You may
> need something to force an early check on focus-out-event for the entry
> or when the user clicks an "Ok" button for example.
>
More information about the pygtk
mailing list