Как я могу связать несколько элементов холста вместе, чтобы изменить их цвет одновременно?
Итак, это линии, которые я создал / нарисовал:
from tkinter import *
root = Tk()
f= Frame(root)
f.pack()
c = Canvas(f,bg = "black")
c.pack()
line1 = c.create_line(10,0,10,50,fill = "white",activefill = "blue",tag = "one")
line_side1 = c.create_line(0,25,10,25,fill= "white", activefill = "blue",tag = "one")
line2 = c.create_line(30,0,30,50,fill = "white",activefill = "blue",tag = "one")
line_side2 = c.create_line(30,25,40,25,fill= "white", activefill = "blue",tag = "one")
c.pack()
root.mainloop()
Итак, теперь я хочу, чтобы все линии стали синего цвета, когда я наведу на них курсор мыши.
Я пытался использовать tag_bind
вариант, но было бы полезно, если бы вы могли показать мне, как это сделать.
2 ответа
Решение
Хотя ответ @AleksanderMonk работает нормально, я думаю, что привязка к тегу "one"
было бы легче в этом случае, особенно когда вы планируете делать больше строк. Вы можете использовать тег вместо идентификатора в обоих tag_bind
и itemconfigure
функция:
from tkinter import *
def change_color(event):
if event.type == "7": # Enter
event.widget.itemconfigure("one", fill="blue")
elif event.type == "8": # Leave
event.widget.itemconfigure("one", fill="white")
root = Tk()
f = Frame(root)
c = Canvas(f, bg="black")
f.pack()
c.pack()
line1 = c.create_line(10, 0,10,50, fill="white", tag="one")
line_side1 = c.create_line( 0,25,10,25, fill="white", tag="one")
line2 = c.create_line(30, 0,30,50, fill="white", tag="one")
line_side2 = c.create_line(30,25,40,25, fill="white", tag="one")
c.tag_bind("one", "<Enter>", change_color)
c.tag_bind("one", "<Leave>", change_color)
root.mainloop()
Я думаю, что все, что вам нужно сделать, это составить список всех идентификаторов линий (line1, line2,..) и при наведении просто изменить цвет для всех элементов в списке.
from tkinter import *
def set_color(event):
for x in all_ids:
c.itemconfig(x, fill="blue")
return
def return_color(event):
for x in all_ids:
c.itemconfig(x, fill="white")
return
all_ids = []
root = Tk()
f = Frame(root)
f.pack()
c = Canvas(f, bg="black")
c.pack()
all_ids.append(c.create_line(10, 0, 10, 50, fill="white"))
all_ids.append(c.create_line(0, 25, 10, 25, fill="white"))
all_ids.append(c.create_line(30, 0, 30, 50, fill="white"))
all_ids.append(c.create_line(30, 25, 40, 25, fill="white"))
for x in all_ids:
c.tag_bind(x, '<Enter>', set_color)
c.tag_bind(x, '<Leave>', return_color)
root.mainloop()