Need help with moving focus using Tkinter

Richard Kuhns rjkuhns at geetel.net
Thu Dec 5 16:37:47 EST 2002


Boy, you guys are good.  I now have things working to my satisfaction, but
there's still at least one thing I just don't understand, and I think that
if I'm going to get good at this I probably should.

On Thu, 5 Dec 2002 09:36:04 -0600
Jeff Epler <jepler at unpythonic.net> wrote:

> Translation to Tkinter should be:
> 
>     t.bind_class("all", "<Key-ISO_Left_Tab>", "tkTabToWindow
>     [tk_focusPrev %W]")
> 
> plus exception handling.  Unfortunately, tkTabToWindow is considered a
> Tk internal command.  It does platform-dependent things (like selecting
> the text of an entry when it gets focus) which .focus_set() doesn't do.

Shift-Tab is "<Key-ISO_Left_Tab>" under FreeBSD 4.7 also.  After I set it
like you described it worked fine.

> You should probably use
> 
>     t.bind_class("all", "<Key-ISO_Left_Tab>",
>         t.bind_class("all", "<Shift-Key-Tab>))
> 
> to copy the binding (if any) of Shift-Key-Tab to ISO_Left_Tab.

t.bind_class("all", "<Shift-Key-Tab>") returns an empty string.

> 
> 
> In Tk version 8.3, there is a new virtual binding <<PrevWindow>>, and
> the Tk startup code makes to make <Key-ISO_Left_Tab> generate
> <<PrevWindow>>.  Tk 8.4 probably continues this tradition.  You could
> use this code sequence to create the virtual binding:
> 
>     t.event_add("<<PrevWindow>>", "<ISO_Left_Tab>")

This works too.

> I hope this information helps you out.

It did; many thanks.  However, could anyone please tell me why 

t.bind_class("all", "<Key-ISO_Left_Tab>", "tkTabToWindow [tk_focusPrev
%W]")

works and

self.bind_all('<Return>', self.hitReturn)

def hitReturn(self, event):
    print "+++Return was hit..."
    self.tk_focusNext().focus_set()

doesn't?  Eric Brunel brought it to my attention that tk_focusNext()
returns the "next" window (if I could read I'd be dangerous), so it seems
to me that the above code should work too.  It doesn't, though -- it
always sets the focus to the first widget.

Thanks to Martin Franklin too for the suggestion to keep the widgets in a
list; that would make it fairly simple to do extra processing on the final
widget without having to worry about what it's called.

Once again, thanks for the help -- it's better than any I've ever paid
for.

	- Dick
-- 
Richard Kuhns			rjkkuhns at geetel.net




More information about the Python-list mailing list