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

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

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

self.canvas.delete("current")

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

self.canvas.delete("token")

Это позволило мне удалить сразу все элементы с тегом "token". Вот выдержка из определений моего линейного объекта, "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")

person user1332577    schedule 23.05.2016    source источник
comment
если я правильно помню, все виджеты имеют идентификатор, может быть, вы можете удалить по идентификатору? я думаю, вам нужно будет захватить идентификатор всех виджетов с соответствующим тегом, чтобы удалить их   -  person glls    schedule 23.05.2016
comment
Да, я пробовал это с параметром self.canvas.find_withtag(token) или self.canvas.gettags(token), но в итоге я все равно могу удалить их все одновременно или что-либо под моим курсором. Я, очевидно, реализую это неправильно, но не уверен, как изменить подход, чтобы он работал.   -  person user1332577    schedule 23.05.2016


Ответы (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
person Oblivion    schedule 23.05.2016
comment
Большое спасибо! Работает как шарм. Не могу поверить, что я не подумал об этом. Я выбрал более короткий путь, но приятно знать, что существуют и другие варианты. - person user1332577; 25.05.2016