TKinter and focus events

Greg McFarlane gregm at iname.com
Sun Jan 23 07:04:56 EST 2000


The beep is coming from the line:
    self.EstWt.configure(validate='integer')
This is because, at this stage.  the text is, for example "$1,234",
which is an invalid integer.  What you need to do is move this line
until after you have called setentry.

On 23 Jan, Timothy Grant wrote:
> Hi,
> 
> Thanks to some kind assistance from the list I have been able to make
> Tkinter do a pretty neat trick (at least I think so!)
> 
> Using Pmw.EntryFields, When the field does not have focus it displays
> numbers formatted to a specification (e.g., $1,234.56). When the
> EntryField gets the focus it reformats the number stripping out the
> eye-candy (e.g., 1234.56). To make sure the user enters the correct
> info, I turn on either 'integer' or 'real' validation when the
> EntryField has focus, and turn it off before I set it to the prettified
> entry.
> 
> It all work phenomenally well, and I'm tremendously pleased with how
> easy it was to convert a number in to nicely formatted text with commas.
> However, there is one minor annoyance, every time I move focus to the
> field I get what sounds like an error beep, everything works correctly,
> I just get this beep, I've been trying to track it down but haven't been
> able to figure it out yet. It appears to occur when I do the setentry()
> call with the unprettified number. Does anyone have any ideas what might
> be happening?
> 
>     def FmtEstWt(self, event):
>         # Event type 9 is FocusIn and type 10 is FocusOut
>         if event.type == '9':   #FocusIn
>             print 'EstWt FocusIn'
>             self.EstWt.configure(validate='integer')
>             self.tmp = string.replace(self.EstWt.get(),',', '')
>             self.tmp = string.replace(self.tmp, '$', '')
>             self.EstWt.setentry(self.tmp)	#Beep appears to go off here.
>         else:                   #FocusOut
>             print 'EstWt FocusOut'
>             self.EstWt.configure(validate=None)
>            
> self.EstWt.setentry(commanumber(string.atoi(self.EstWt.get()),0,0))
> 
> OK, I just thought of something just before I hit my send button, so I
> actually setup an "invalidcommand" option for the EntryField. Sure
> enough, the invalid function gets called when I do the setentry. This
> does not stop the setentry from working though. I've dumped the contents
> of self.tmp, and it appears to be a clean string that if I keyed by hand
> would pass the validation no problem.
> 
> -- 
> Stand Fast,
>     tjg.
> 
> Chief Technology Officer              tjg at exceptionalminds.com
> Red Hat Certified Engineer            www.exceptionalminds.com
> Avalon Technology Group, Inc.                   (503) 246-3630
> >>>>>>>>>>>>Linux...Because rebooting isn't normal<<<<<<<<<<<<
> 
> -- 
> http://www.python.org/mailman/listinfo/python-list
> 

-- 
Greg McFarlane     INMS Telstra Australia     gregm at iname.com




More information about the Python-list mailing list