Home > Back-end >  how to change the color of PanedWindow upon hovering over it, for multiple PanedWindow in tkinter?
how to change the color of PanedWindow upon hovering over it, for multiple PanedWindow in tkinter?

Time:01-05

I am trying to make PanedWindow change color when I hover mouse over it in tkinter.

now this works for a single iteration. but when i try to do it for multiple panedwindows it only changes color of the last window.

    import tkinter as tk

    root = tk.Tk()
    for i in range(10):

        m1 = tk.PanedWindow(root, bd=4, relief="flat", bg="blue")

        m1.pack()

        def on_enter(e):
             m1.config(background='OrangeRed3', relief="flat")


        def on_leave(e):
             m1.config(background='SystemButtonFace', relief="flat")


        # Create a Button
        button1 = tk.Button(m1, text=f"{i}")
        button1.pack(pady=20)

        # Bind the Enter and Leave Events to the Button
        m1.bind('<Enter>', on_enter)
        m1.bind('<Leave>', on_leave)

        m1.add(button1)
    tk.mainloop()

CodePudding user response:

Since at each iteration of the loop all variables are overwritten, the functions are bound to the last created element. It is necessary to pass the desired element to the function. It is even better to collect everything created in dictionaries, so that in the future you can easily change them.

import tkinter as tk
from functools import partial

ms = {}
btns = {}

root = tk.Tk()


def on_enter(m, e):
    m.config(background='OrangeRed3', relief="flat")


def on_leave(m, e):
    m.config(background='SystemButtonFace', relief="flat")

for i in range(10):

    ms[i] = tk.PanedWindow(root, bd=4, relief="flat", bg="blue")
    ms[i].pack()

    # Create a Button
    btns[i] = tk.Button(ms[i], text=f"{i}")
    btns[i].pack(pady=20)

    # Bind the Enter and Leave Events to the Button
    ms[i].bind('<Enter>', partial(on_enter, ms[i]))
    ms[i].bind('<Leave>', partial(on_leave, ms[i]))

    ms[i].add(btns[i])
tk.mainloop()
  • Related