Возможность удаления всех элементов с определенным тегом объекта tkinter

У меня есть несколько разных тегов объектов в холсте tkinter. Я хотел бы, чтобы пользователь мог удалить текущий объект под курсором мыши с тегом "токен".

Я не хочу, чтобы все объекты с тэгом "token" были удалены, только один под курсором мыши. Я хотел бы, чтобы любой объект с тегом "токен" можно было удалить. Я хочу запретить удаление объектов с тегами "строки. Я пробовал:

self.canvas.delete("current")

Но это позволяет мне удалить что-либо под моим курсором мыши (включая объект линии). Когда я пытался

self.canvas.delete("token")

Это позволило мне удалить все элементы с тегом "токен" сразу. Вот выдержка из определений для моего строкового объекта, объектов "токен" и моей функции удаления:

 # create static line 
    self.canvas.create_line(50,250,200,250, width=7,fill="grey", tags = "line")

 #Create oval
 myoval = self.canvas.create_oval(x0,y0,x1,y1, width=10, outline="black", fill = "black", tags = "token")


 def on_button_press_deleteoval(self,event):
    '''Delete oval with double button 1 click'''
    self.canvas.delete("current")

1 ответ

Решение

Вы можете пройти долгий путь:

if 'token' in canvas.gettags(canvas.find_withtag('current')):
    canvas.delete('current')

или используйте ярлык:

canvas.delete('current&&token') #logical operator in tag search expression

# && = AND, || = OR, ! = NOT
Другие вопросы по тегам