Я хочу создать, удалить, а затем - снова - создать элементы на холсте. Было бы очень удобно, если бы вновь созданные элементы имели те же идентификаторы, что и ранее.
Я попытался справиться с этим, удалив элементы с canvas.delete(tag)
, а также отделив элементы с помощью canvas.dtag(dot, ID-of-dot)
. Отметив, что до сих пор работал. Вот пример, чтобы показать, что я имею в виду:
import tkinter as tk
root = tk.Tk()
x = 0
y = 25
def oval():
global x, y
coords = [x-5, y-5, x+5, y+5]
if x < 40:
x += 10
else:
x = 10
canv.delete("dots")
coords = [x - 5, y - 5, x + 5, y + 5]
canv.create_oval(*coords, tags="dots")
dot_list = canv.find_withtag("dots")
txt.delete(1.0, "end")
txt.insert(0.0, dot_list)
canv = tk.Canvas(root, width=50, height=50)
canv.grid(row=0, column=0)
but1 = tk.Button(root, width=10, height=1, text="Push Me", command=oval)
but1.grid(row=0, column=1)
txt = tk.Text(width=10, height=1)
txt.grid(row=0, column=2)
root.mainloop()
Я хочу, чтобы идентичные идентификаторы (1, 2, 3, 4) повторялись, а не просто продолжали считать, как здесь. Есть ли способ сделать это?
РЕДАКТИРОВАТЬ
Так как кажется, что вы не можете повторно использовать идентификаторы, но для общего решения вы можете использовать подход @martineauи обрабатывать ID-Dict для назначения идентификаторов. Для этого конкретного примера я нашел обходной путь по списку овалов и просто взял в качестве результата счет:
txt.delete(1.0, "end")
for i, dot in enumerate(canv.find_withtag("dots")):
txt.insert("end", i+1)