Unbinding Tkinter default bindings for Listbox

James Stroud jstroud at mbi.ucla.edu
Mon Jan 12 06:27:52 EST 2009


Roger wrote:
> Hi Everyone,
> 
> I have a behavior associated with a default binding with Tkinter
> Listbox that I want to get rid of but I can't no matter if I return
> "break" on the binding or unbind it directly. If you have a Listbox
> where the bounding box is not completely revealed in the window that
> holds it and you use the mouse to drag the list box, the contents of
> the listbox will move in the X direction to reveal the area that's
> hidden.  After searching the internet for hours I found the behavior I
> want to remove is a default binding as described here:
> 
> http://tcltk.free.fr/man/TkCmd/listbox.php3
> 
> "[3] If the mouse leaves the listbox window with button 1 down, the
> window scrolls away from the mouse, making information visible that
> used to be off-screen on the side of the mouse. The scrolling
> continues until the mouse re-enters the window, the button is
> released, or the end of the listbox is reached. "
> 
> After further searching I found that the code for this in tcl is
> described here:
> 
> http://www.openmash.org/lxr/source/library/listbox.tcl?c=tk8.3
> 
>  50 bind Listbox <B1-Motion> {
>  51     set tkPriv(x) %x
>  52     set tkPriv(y) %y
>  53     tkListboxMotion %W [%W index @%x,%y]
>  54 }
> 
> Now I've found no way to successfully unbind B1-Motion from the
> listbox, as I said above.  Nor return "break" on receiving the event.
> I do want to eventually have my own B1-Motion binding applied to the
> listbox for a different reason (with add='+' if necessary).  My next
> step was to see if I could just unbind B1-Motion then programmatically
> delete tkListboxMotion in my code but tkListboxMotion is not available
> in the Tkinter source (it's part of a compiled binary I can't reach?).
> 
> Any help would be greatly appreciated.  Thanks!
> Roger.

You can directly send commands to the Tcl interpreter via the call 
method of the tk attribute of any Tkinter widget. For example:


py> from Tkinter import *
py> tk = Tk()
py> b = Button(tk)
py> b.pack()
py> b.tk
<tkapp object at 0xd57720>
py> b.tk.call('bind', 'Listbox', '<B1-Motion>')
'\n    set tk::Priv(x) %x\n    set tk::Priv(y) %y\n    tk::ListboxMotion 
%W [%W index @%x,%y]\n'
py> b.tk.call('bind', 'Listbox', '<B1-Motion>', _)
''


James



-- 
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095

http://www.jamesstroud.com



More information about the Python-list mailing list