[Tutor] tkinter canvas
Kent Johnson
kent37 at tds.net
Thu Jan 15 13:24:29 CET 2009
On Thu, Jan 15, 2009 at 12:41 AM, Mr Gerard Kelly
<s4027340 at student.uq.edu.au> wrote:
> I want to be able to bind these boxes to an event - so that I can either
> click on them, or hold the mouse cursor over them, and have them change
> color.
Here is a version of your program that binds the Enter and Leave
events to each box and changes the box color when the mouse is over
it:
#########################
from Tkinter import *
master = Tk()
numboxes=6
width=40*(numboxes+2)
height=200
w = Canvas(master, width=width, height=height)
w.pack()
size=width/(numboxes+2)
box=[0]*numboxes
def enter(e, i):
e.widget.itemconfigure(box[i], fill='red')
def leave(e, i):
e.widget.itemconfigure(box[i], fill='blue')
for i in range(numboxes):
box[i]=w.create_rectangle((1+i)*40, 40, (2+i)*40, height-40, fill="blue")
w.tag_bind(box[i], '<Enter>', lambda e, i=i: enter(e, i))
w.tag_bind(box[i], '<Leave>', lambda e, i=i: leave(e, i))
mainloop()
#######################
The 'i=i' in the lambda is needed due to the (surprising) way that
variables are bound to closures; without it, every event would be
bound to the same value of i. Some explanation here:
http://code.activestate.com/recipes/502271/
Kent
More information about the Tutor
mailing list