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