Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Tkinter default bindings

Reply
Thread Tools

Tkinter default bindings

 
 
Phil Schmidt
Guest
Posts: n/a
 
      03-01-2004
I have an Entry widget inside a Frame. The Frame contains other
widgets as well. I have bound the <Key> event to the Frame, but I
don't want the Frame to receive the event when the Entry widget has
focus.

So, I bound the <Key> event to the Entry widget (bound to method
a_key()). This works, except that both the Entry and Frame widgets get
the event. This also forces me to implement event handlers, which is
fine for the Frame since that's what I want to do. But I want the
Entry to use its default handler, not my own handler. Rather than
duplicate all that functionality, I found I could accomplish this by
temporarily unbinding the events, re-generating the event, and then
re-binding the events, as follows:

def a_key(self, e):
self.top.unbind('<Key>')
self.entry.unbind('<Key>')
self.entry.event_generate('<Key>',
keycode=e.keycode,
keysym=e.keysym,
)
self.entry.bind('<Key>', self.a_key)
self.top.bind('<Key>', self._parent_class__keypress)
return 'break'

This works, but it's kludgy. Is there a better way to do this? I just
want the Entry widget to receive the event when it has focus, behave
in its default manner, and not have the event propagate upward to
containing widgets.
 
Reply With Quote
 
 
 
 
Martin Franklin
Guest
Posts: n/a
 
      03-02-2004
Phil Schmidt wrote:
> I have an Entry widget inside a Frame. The Frame contains other
> widgets as well. I have bound the <Key> event to the Frame, but I
> don't want the Frame to receive the event when the Entry widget has
> focus.
>
> So, I bound the <Key> event to the Entry widget (bound to method
> a_key()). This works, except that both the Entry and Frame widgets get
> the event. This also forces me to implement event handlers, which is
> fine for the Frame since that's what I want to do. But I want the
> Entry to use its default handler, not my own handler. Rather than
> duplicate all that functionality, I found I could accomplish this by
> temporarily unbinding the events, re-generating the event, and then
> re-binding the events, as follows:
>
> def a_key(self, e):
> self.top.unbind('<Key>')
> self.entry.unbind('<Key>')
> self.entry.event_generate('<Key>',
> keycode=e.keycode,
> keysym=e.keysym,
> )
> self.entry.bind('<Key>', self.a_key)
> self.top.bind('<Key>', self._parent_class__keypress)
> return 'break'
>
> This works, but it's kludgy. Is there a better way to do this? I just
> want the Entry widget to receive the event when it has focus, behave
> in its default manner, and not have the event propagate upward to
> containing widgets.


You could just find out who has focus (root.focus_get() and compare with
the entry... something like (untested)

def a_key(self, event):
has_focus = root.focus_get()
if theEntry==has_focus:
print "the entry binding"
return "break"
else:
print "the frame binding"


Martin

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Unbinding Tkinter default bindings for Listbox Roger Python 7 01-13-2009 01:13 AM
list JNDI bindings in default JBoss install from command line client rwfields@yahoo.com Java 0 01-04-2007 11:31 PM
Default function arguments, KURL::cleanPath() -- a bindings bug? Frans Englich Python 0 03-08-2005 06:02 AM
bindings in Tkinter p.kosina Python 3 06-16-2004 12:34 PM
Tkinter and readline key bindings Will Woods Python 0 09-02-2003 05:00 PM



Advertisments