Как выделить две разные метки при наведении курсора на любую из них в tkinter?
Я создаю небольшое приложение, используя tkinter, где он показывает вам список работы, выполненной в конкретном заданном интервале, формат, как показано ниже
co11 col2
Time done Activity name
Ниже приведен код. Поскольку два столбца находятся далеко, когда я нахожу курсор на одну из двух меток внутри цикла for, я хочу, чтобы обе метки были выделены для упрощения идентификации имени времени выполнения. Я реализовал метки в макете сетки как отдельные метки.
def on_click(e):
e.widget['bg']='#fafafa'
def on_leave(e):
e.widget['bg']='#dcdcdc'
if result1:
Label(second_frame, text=start_time[11:], width=115, font=('Tahoma', 15),
fg='black',bg='#aaaaaa').grid(row=x,column=0, columnspan=2)
x += 1
for j in result1:
temp = int(j[2]) * int(j[3])
# print(j[0][11:], j[1], j[2], j[3], temp)
sub_total += temp
total_pts += temp
e1=Label(second_frame, text=j[0][11:], font=('Tahoma', 12), bg='#dcdcdc', width=71)
e1.grid(row=x,column=0)
e2=Label(second_frame, text=str(j[1]), font=('Tahoma', 12), bg='#dcdcdc', width=71)
e2.grid(row=x,column=1)
e1.bind('<Enter>',on_click)
e1.bind('<Leave>',on_leave)
e2.bind('<Enter>', on_click)
e2.bind('<Leave>', on_leave)
x += 1
2 ответа
Вы можете связать пары кнопок в каждой строке друг с другом, используя определенный пользователем атрибут кнопки, после чего вы можете легко выделить их вместе.
Ниже приведен пример:
import tkinter as tk
root = tk.Tk()
def on_click(e):
e.widget['bg'] = "#fafafa"
e.widget.peer['bg'] = "#fafafa" # set the peer as well
def on_leave(e):
e.widget['bg'] = "#dcdcdc"
e.widget.peer['bg'] = "#dcdcdc" # set the peer as well
for i in range(10):
e1 = tk.Label(root, text=f"Left {i+1}", width=10, bg="#dcdcdc", font="Tahoma 12")
e1.grid(row=i, column=0, padx=(0,300))
e2 = tk.Label(root, text=f"Right {i+1}", width=10, bg="#dcdcdc", font="Tahoma 12")
e2.grid(row=i, column=1, padx=(300,0))
e1.bind("<Enter>", on_click)
e1.bind("<Leave>", on_leave)
e2.bind("<Enter>", on_click)
e2.bind("<Leave>", on_leave)
# link the pair buttons together
e1.peer = e2
e2.peer = e1
root.mainloop()
Простым решением может быть сгруппировать элементы, которые необходимо настроить, как в
list
Пример
from tkinter import *
def on_enter(event):
if event.widget in labels:
for label in labels:
label['bg']='#fafafa'
def on_leave(event):
if event.widget in labels:
for label in labels:
label['bg']='#dcdcdc'
root=Tk()
hello_label=Label(root,text='Hello')
hello_label.pack(side='left',pady=20)
world_label=Label(root,text='World')
world_label.pack(side='left',pady=20)
labels=[hello_label,world_label]
root.bind_all('<Enter>',on_enter)
root.bind_all('<Leave>',on_leave)
root.mainloop()