Вы можете сделать это на холсте. Поместите метку на холст и используйте функции bind
для событий Enter
и Leave
:
# imports
import tkinter as tk
# creating master
master = tk.Tk()
# hover functions
def motion_enter(event):
my_label.configure(fg='green')
print('mouse entered the canvas')
def motion_leave(event):
my_label.configure(fg='grey')
print('mouse left the canvas')
# create canvas, on which if you hover something happens
canvas = tk.Canvas(master, width=100, height=100, background='grey')
canvas.pack(expand=1, fill=tk.BOTH)
# create label
my_label = tk.Label(canvas, text='Toggle text is here!', fg='grey')
my_label.pack()
# binding enter and leave functions
master.bind('<Enter>', motion_enter)
master.bind('<Leave>', motion_leave)
# set window size
master.geometry('400x200')
# start main loop
master.mainloop()
Вы можете изменить конфигурацию любых объектов при наведении курсора на холст или что-либо еще в созданных функциях. Играйте с объектами и кодом, чтобы делать все, что вы хотите.
Также, как уже упоминалось, вы можете хранить свои ярлыки или другие объекты в списке или словаре для изменения отдельных объектов, например:
# imports
import tkinter as tk
# creating master
master = tk.Tk()
d = {}
# hover functions
def motion_enter(event):
d['first'].configure(fg='green')
print('mouse entered the canvas')
def motion_leave(event):
d['first'].configure(fg='grey')
print('mouse left the canvas')
# create canvas, on which if you hover something happens
canvas = tk.Canvas(master, width=100, height=100, background='grey')
canvas.pack(expand=1, fill=tk.BOTH)
# create label
my_label = tk.Label(canvas, text='Toggle text is here!', fg='grey')
my_label.pack()
d['first'] = my_label
my_label = tk.Label(canvas, text='Toggle text is here!', fg='grey')
my_label.pack()
d['second'] = my_label
# binding enter and leave functions
master.bind('<Enter>', motion_enter)
master.bind('<Leave>', motion_leave)
# set window size
master.geometry('400x200')
# start main loop
master.mainloop()
РЕДАКТИРОВАТЬ 1
Если вы хотите удалить ярлык, когда мышь покинула холст, вы можете написать такие функции:
def motion_enter(event):
d['first'].pack()
d['second'].pack()
print('mouse entered the canvas')
def motion_leave(event):
d['first'].pack_forget()
d['second'].pack_forget()
print('mouse left the canvas')
или просто добавить 2 строки в предыдущем объединить их.