能够删除具有特定对象标签 tkinter 的所有项目

use*_*577 7 python tkinter tkinter-canvas

我在 tkinter 画布中有几个不同的对象标签。我希望用户能够删除带有标记的鼠标光标下的当前对象"token"

我不希望"token"删除带有标记的所有对象,只删除鼠标光标下的对象。我希望"token"能够删除带有标记的任何对象。我想禁止删除带有标签的对象"line"。我试过了:

self.canvas.delete("current")
Run Code Online (Sandbox Code Playgroud)

但这允许我删除鼠标光标下的任何内容(包括线对象)。当我尝试

self.canvas.delete("token")
Run Code Online (Sandbox Code Playgroud)

这让我可以"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")
Run Code Online (Sandbox Code Playgroud)

Obl*_*ion 10

你可以走很长的路:

if 'token' in canvas.gettags(canvas.find_withtag('current')):
    canvas.delete('current')
Run Code Online (Sandbox Code Playgroud)

或使用快捷方式:

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

# && = AND, || = OR, ! = NOT
Run Code Online (Sandbox Code Playgroud)