【问题标题】:Capability to delete all items with certain object tag tkinter能够删除具有特定对象标签 tkinter 的所有项目
【发布时间】:2016-09-19 17:48:19
【问题描述】:

我在 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")

【问题讨论】:

  • 如果我没记错的话,所有的小部件都有 id,也许你可以按 id 删除?我认为您必须使用相应标签捕获所有小部件的 id 才能删除它们
  • 是的,我已经尝试使用 self.canvas.find_withtag("token") 或 self.canvas.gettags("token") 选项,但我仍然只能删除所有他们同时或我光标下的任何东西。我显然实施错了,但不知道如何改变方法,所以它会起作用。

标签: python tkinter tkinter-canvas


【解决方案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

【讨论】:

  • 非常感谢!奇迹般有效。我不敢相信我没有想到这一点。我选择了捷径,但很高兴知道还有其他选择。
猜你喜欢
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多