Каждый метод create_XXX
дает id
созданного объекта
id = canvas.create_rectangle(...)
, который можно сохранить в списке, чтобы иметь доступ ко всем объектам, когда он будет необходим.
Для измененияОпция объекта вы можете использовать это id
canvas.itemconfig(id, fill='blue')
Вы можете привязать к Canvas
функцию, которая будет выполняться при нажатии левой кнопки (<Button-1>
)
canvas.bind('<Button-1>', on_click)
Иэта функция получит event
с позицией мыши event.x
, event.y
, которую вы можете использовать, чтобы найти объект на холсте
selected_id = canvas.find_overlapping(event.x, event.y, event.x+1, event.y+1)
И теперь вы можете отменить выбор всех элементов и выбрать только выбранный элемент
for id_ in all_ids:
canvas.itemconfig(id_, fill='red')
if selected_id:
canvas.itemconfig(selected_id, fill='blue')
import tkinter as tk
# --- functions ---
def on_click(event):
#print(event)
selected_id = canvas.find_overlapping(event.x, event.y, event.x+1, event.y+1)
print(selected_id)
for id_ in all_ids:
canvas.itemconfig(id_, fill='red')
if selected_id:
canvas.itemconfig(selected_id, fill='blue')
# --- main ---
root = tk.Tk()
canvas = tk.Canvas()
canvas.pack()
canvas.bind('<Button-1>', on_click)
all_ids = []
for x in range(10, 301, 60):
id_ = canvas.create_rectangle((x, 10, x+50, 60), fill='red')
all_ids.append(id_)
root.mainloop()
Док: Холст