Я пытаюсь удалить прямоугольник с холста с помощью второго нажатия кнопки, используя список тегов. Смотрите функцию «insert_or_delete_cells» ниже. Хотя код поддерживает актуальность списка тегов, он не удаляет сам прямоугольник с холста. Из операторов печати видно, что код не получает идентификатор прямоугольника, поэтому ничего не удаляется. Как улучшить этот код?
import tkinter as tk
def insert_or_delete_cells():
def xyposition(event):
x = canvas.canvasx(event.x)
y = canvas.canvasy(event.y)
x_matrix=int(x//cell)
y_matrix=int(y//cell)
x0 = x_matrix*cell+1
y0 = y_matrix*cell+1
mark = str(x_matrix)+str(y_matrix)
c = cell-1
if mark not in tags_list:
rect = canvas.create_rectangle(x0,y0,x0+c,y0+c, width=0, fill='green', tags = mark)
tags_list.append(mark)
print('new cell id: ', rect, 'new cell tag: ', mark)
else:
r=canvas.find_withtag(mark)
print('removed cell id: ', r, 'removed cell tag: ', mark)
canvas.delete(mark) # canvas.delete(r) doesn't work neither
tags_list.remove(mark)
canvas.bind("<Button-1>", xyposition)
def stop_insert_cells():
canvas.unbind('<Button-1>')
# MAIN
root = tk.Tk()
root.geometry("400x400")
n=30
m=30
cell=10
w = n*cell
h = m*cell
# canvas
canvas = tk.Canvas(root,width = w, height = h, borderwidth = 0, highlightthickness=0)
canvas.place(x=20, y=20)
# border canvas
canvas.create_rectangle(0,0,w-1,h-1, outline = 'black')
# cell filling
tags_list = []
start_insert_button = tk.Button(root, text='start', command = insert_or_delete_cells)
stop_insert_button = tk.Button(root, text = 'stop', command = stop_insert_cells)
stop_insert_button.pack(side='bottom')
start_insert_button.pack(side='bottom')
root.mainloop()