mountdoo...@gmail.com wrote: > I´m trying to make a script, which will change the background and > foreground color of widgets after hovering.
> but when I hover on any button, nothing happens, they stay white. I know I > could use a function, but there would be two functions for every widget (1 > for , 1 for ). I'd like to create a single function, which will recolor > that widget I hover on and explain why this script is not doing what I > want it to do. > > I hope I described my problem well. You did. > from Tkinter import * > > root=Tk() > > Hover1=Button(root,text="Red color", bg="white") > Hover1.pack() > > Hover2=Button(root,text="Yellow color", bg="white") > Hover2.pack() > > Hover1.bind("<Enter>",Hover1.configure(bg="red")) This calls Hover1.configure(bg="red") once and binds the result of that method call (which is None) to the event. So the above line is equivalent to Hover1.configure(bg="red") Hover1.bind("<Enter>", None) You say you don't want to write a function, but that is really the correct aproach. Fortunately there is a way to create such a function on the fly: def f(event): Hover1.configure(bg="red") can be written as f = lambda event: Hover1.configure(bg="red") With that your code becomes Hover1.bind("<Enter>", lambda event: Hover1.configure(bg="red")) Hover1.bind("<Leave>", lambda event: Hover1.configure(bg="white")) and so on. In this specific case this doesn't have the desired effect because when the mouse enters a Button widget its background color changes to 'activebackground'. So you don't really need to bind the enter/leave events. Specify an activebackground instead when you create the buttons. For example: Hover1 = Button(root, text="Red color", bg="white", activebackground="red") Hover1.pack() -- http://mail.python.org/mailman/listinfo/python-list