Mouse wheel event for Canvas

John McMonagle jmcmonagle at velseis.com.au
Thu Jun 22 20:08:14 EDT 2006


On Thu, 2006-06-22 at 14:24 +1000, John McMonagle wrote:
> I tried binding mouse wheel events (<Button-4>, <Button-5>) to a Tkinter
> Canvas widget with the hope of using the event.delta value to
> subsequently scroll the Canvas.
> 
> However, it seems that event.delta always returns 0.
> 
> For example,
> 
> from Tkinter import *
> 
> r = Tk()
> c = Canvas(r, scrollregion=(0,0,500,500), height=200, width=200)
> s = Scrollbar(r, command=c.yview)
> c.pack(side=LEFT)
> s.pack(side=RIGHT, fill=Y)
> c.configure(yscrollcommand=s.set)
> c.create_rectangle(10,10,100,100)
> c.create_rectangle(10,200,100,300)
> 
> def rollWheel(event):
>     print event.delta
> 
> c.bind('<Button-4>', rollWheel)
> c.bind('<Button-5>', rollWheel)
> 
> c.focus_set()
> 
> r.mainloop()
> 
> 
> Has anyone successfully managed to wheel scroll a Tkinter Canvas
> widget ?
> 
> Regards,
> 
> John
> 
> 
> 

I worked it out.

c.bind('<Button-4>', lambda event: event.widget.yview_scroll(-1, UNITS))
c.bind('<Button-5>', lambda event: event.widget.yview_scroll(1, UNITS))

I also changed the yscrollincrement to '5p'.  The default moved a bit
too much.



-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.




More information about the Python-list mailing list